One of the tasks that seems to persistently find its way to my doorstep is building calendaring systems. Always maddening, incredibly frustrating and never as easy as it seems it should be, building a system that deals with events and dates and times is a rite of passage for many developers. You can always tell who has had the mind-bending pleasure of dealing with timezones and daylight savings time. When presented with the subject they often develop a far away look that only those who have peered into the depths of pure insanity possess. I have had the fortune of building four such systems in my life. I am now a die-hard single global timezone advocate, and I am not alone.
Today I was building a little script that deals with dates in filenames and needed to brush up on my ‘date’ command usage. In doing so, I came across one of the little quotes and witticisms that are scattered deep in the bowels of manual pages and source code comments by angry, bored or playful developers for others to discover like little digital treasures. This is the clever quote embedded in the ‘date’ command info page:
File: coreutils.info, Node: Date input formats, Next: Opening the software toolbox, Prev: File permissions, Up: Top
27 Date input formats
First, a quote:
Our units of temporal measurement, from seconds on up to months, are so complicated, asymmetrical and disjunctive so as to make coherent mental reckoning in time all but impossible. Indeed, had some tyrannical god contrived to enslave our minds to time, to make it all but impossible for us to escape subjection to sodden routines and unpleasant surprises, he could hardly have done better than handing down our present system. It is like a set of trapezoidal building blocks, with no vertical or horizontal surfaces, like a language in which the simplest thought demands ornate constructions, useless particles and lengthy circumlocutions. Unlike the more successful patterns of language and science, which enable us to face experience boldly or at least level-headedly, our system of temporal calculation silently and persistently encourages our terror of time.
… It is as though architects had to measure length in feet, width in meters and height in ells; as though basic instruction manuals demanded a knowledge of five different languages. It is no wonder then that we often look into our own immediate past or future, last Tuesday or a week from Sunday, with feelings of helpless confusion. …
— Robert Grudin, `Time and the Art of Living’.
This section describes the textual date representations that GNU programs accept. These are the strings you, as a user, can supply as arguments to the various programs. The C interface (via the `getdate’ function) is not described here.