Why does TAI start with an offset of 10 seconds? 1972-01-01 is before any leap seconds.<p>Edit: I can see it matches the right value but I can't figure out why. There have been 25 leap seconds but there's a 35 second offset...<p>Edit 2: Apparently the clocks ran at <i>different speeds</i> for a decade, and the difference got rounded to 10 in 1972.
`struct xtime` and `xtime_get` were added in C11 as `struct timespec` and `timespec_get`:<p><a href="http://port70.net/~nsz/c/c11/n1570.html#7.27.1p3" rel="nofollow">http://port70.net/~nsz/c/c11/n1570.html#7.27.1p3</a><p><a href="http://port70.net/~nsz/c/c11/n1570.html#7.27.2.5" rel="nofollow">http://port70.net/~nsz/c/c11/n1570.html#7.27.2.5</a><p>There are some differences though. Not only the name and types differ. But also `timespec_get` is only required to support `TIME_UTC` and the specification is not as detailed.
As a reminder of how painful and complicated dealing with time is, here is an excellent essay by Erik Naggum:<p><a href="http://naggum.no/lugm-time.html" rel="nofollow">http://naggum.no/lugm-time.html</a>
Not about C, but IMO the way that Go handles time is very convenient. Time zones are pretty well-encapsulated in the Time struct and that makes for really nice function interfaces. Also, there's this gem:<p>`
These three considerations—choose an epoch as early as possible, that
uses a year equal to 1 mod 400, and that is no more than 2^63 seconds
earlier than 1970—bring us to the year -292277022399. We refer to
this year as the absolute zero year, and to times measured as a uint64
seconds since this year as absolute times.
`<p><a href="https://golang.org/src/pkg/time/time.go" rel="nofollow">https://golang.org/src/pkg/time/time.go</a>