Defect in XSH strftime

Paul Eggert eggert at CS.UCLA.EDU
Fri Jan 21 21:56:48 UTC 2005


In <https://www.opengroup.org/sophocles/show_mail.tpl?source=L&listname=austin-group-l&id=7964>,
Eric Blake <ebb9 at byu.net> writes:

> this means that %Y is not equivalent to %C%y, since %C is documented
> to be exactly two digits

This topic came up around 2004-08-20 in the tz mailing list.
(Please see <http://www.twinsun.com/tz/tz-link.htm> for info about the
list; it is archived in <ftp://elsie.nci.nih.gov/pub/tzarchive.gz>.)

The consensus was as follows (presumably a defect report could also be
submitted to POSIX, as POSIX can place requirements on strftime that
are over and above what ISO C requires):

 * The ISO C standard is broken in this area; the standardizers did
   not think about the problem.  (One of those involved in the tz
   discussion was also involved with the ISO C effort.)

 * A Defect Report should be submitted.  (Nobody has yet done so, to my
   knowledge.)

 * Best practice (which is not currently required by any standard) is
   to have the following behavior, originally suggested by
   Arthur David Olson:

     - %Y always generates the mathematically-correct result,
       even if the expression "tm.tm_year + 1900" would overflow.

     - %Y is always equivalent to %C%y.

     - %y is always in the range [00,99].

     - %C is in the range [00,99] when possible.

     - %C is two characters long when possible.

    Here are some examples:

        %Y     %C   %y
       10000   100  00
       9999    99   99
       0999    09   99
       0099    00   99
       0001    00   01
       0000    00   00
       -001    -0   01
       -099    -0   99
       -999    -9   99
       -1000   -10  00
       -10000  -100 00

          %Y         %C      %y
       -2147481749 -21474817 49
       2147485547  21474855  47

    Note that the last example overflows 32-bit 'int', but it is the
    best-practice behavior even on 32-bit-int hosts.

 * The tz library <ftp://elsie.nci.nih.gov/pub/> now has the
   best-practice behavior suggested above.



More information about the tz mailing list