strftime %y and negative years

Clive D.W. Feather clive at
Wed Aug 25 09:23:45 UTC 2004

Paul Eggert said:
>> Note, by the way, that strftime is only supposed to work when the relevant
>> fields are in their "normal range". No such range is given for tm_year.
> I intepret this to mean that strftime is supposed to work regardless
> of the value of tm_year.

I would agree.

> However, the standard says that %C always generates a value in the
> range [00,99] so it would appear there's an inconsistency here.

Also agreed.

> I
> suppose one could argue that %C has undefined behavior for years
> outside the range [0, 9999].  But this appears to me to be a defect in
> the standard -- at least, things are quite unclear here.  I would
> prefer it if strftime were required to handle all tm_year values.

So would I, but persuading WG14 might be harder.

> There is no similar restriction on the range for %Y, which suggests
> that strftime %Y must handle all tm_year values.
> For %y the range is [00,99], which argues for using modulus rather
> than remainder.

All that says is that the value must be in that range. A system that
generates %C "-2" %y "34" for the year -234 (235 B.C.) would, I think,

> Here's a test program you can use to try out your implementation.

FreeBSD appears to do the same as OpenBSD.

Clive D.W. Feather  | Work:  <clive at>   | Tel:    +44 20 8495 6138
Internet Expert     | Home:  <clive at>  | Fax:    +44 870 051 9937
Demon Internet      | WWW: | Mobile: +44 7973 377646
Thus plc            |                            |

More information about the tz mailing list