M. Warner Losh skrev:
In message: <20090105102452.gj14...@fysh.org>
            Zefram <zef...@fysh.org> writes:
: M. Warner Losh wrote:
: >So time_t is effectively defined in POSIX to be:
: >
: >  d * 86400 + min(tod(x), 86399)
: >
: >where d is the number of days since 01-01-1970, and tod is the second
: >since midnight within the day.
: : Actually it's simpler than that. The expression given by POSIX amounts to : : d * 86400 + tod(x) : : so a leap second appears identical to the first second of the next day,
: rather than a repeat of the previous second.

That's what the broken down time translation results in.  However, I
don't think that POSIX specifies the 'proper' value for the leap
second because leap seconds are explicitly excluded from the spec.
The reason it maps to the above is due to the normalization rules for
the '60' part of the broken down time, not because it is a leap second
and is defined to map there.

Actually, when you read the rationale it become clear that they where quite aware of how leap seconds does work. It is not fair to say they totally ignored it. It is more fair to say that the chose a time_t representation that does not allow leap seconds to be uniquely represented but rahter maintained the time_t % 86400 == 0 aspect for midnight as they thought most systems where best served by this definition. That this definition causes some of us grief is another thing.

A peculiar aspect of the defined mapping is however that POSIX midnight (time_t % 86400 == 0) occurs twice (two continous seconds) when a leap second is inserted such that it should trigger midnight 1 second prior to UTC midnight, 86400 seconds after the previous midnight and 86401 seconds before the next. There is a little chance that some software could double-trigger on the midnight event. Duplicating 23:59:59 is safer in this regard.

: What's actually implemented
: by particular kernels varies; Linux, for example, does something in
: between these, jumping backwards (by 1) a few milliseconds after the
: start of the leap second.

FreeBSD too.  Any NTP based kernel does this.

Many kernels implement the NTP interface, more or less straight as given I beleive.

Cheers,
Magnus
_______________________________________________
LEAPSECS mailing list
LEAPSECS@leapsecond.com
http://six.pairlist.net/mailman/listinfo/leapsecs

Reply via email to