[tz] strftime and nonnormalized dates/times

Paul Eggert eggert at cs.ucla.edu
Tue Jul 3 14:39:48 UTC 2018

Clive D.W. Feather wrote:
> In this case, the resulting string could be anything but it must still be a
> string and the call can't break anything else.

Yes, and tzcode substitutes "?" for some values out of range, e.g., month names 
when tm_mon < 0. This behavior is common in other implementations. 
Alternatively, strftime could simply return 0, pretending that the resulting 
string is infinitely long.

The trickiest issue here is when tm_year < 1 - 1900, that is, before Gregorian 
year 1. Although C11 and POSIX-2017 say that strftime must produce a decimal 
number, they don't say what the number should be. tzcode, like all other 
implementations I know of, says the years before year 1 are years 0, -1, -2, 
.... This follows the astronomical tradition used by Kepler and popularized by 
Cassini <https://en.wikipedia.org/wiki/Astronomical_year_numbering>.

More information about the tz mailing list