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, conform.
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@demon.net> | Tel: +44 20 8495 6138 Internet Expert | Home: <clive@davros.org> | Fax: +44 870 051 9937 Demon Internet | WWW: http://www.davros.org | Mobile: +44 7973 377646 Thus plc | |