
On 27 January 2005 17:06, Daan Leijen wrote:
Marcin 'Qrczak' Kowalczyk wrote:
You can't have gettimeofday() returning UTC and libtai returning TAI at the same time, because they return the same thing. This is the implementation from libtai:
[snip]
DJB (the author of libtai) disagrees with POSIX about what gettimeofday should return, and assumes that it actually returns what he wishes it returned.
Wow, that is terrible! Well, we can not fix libraries. If libtai is that broken, we can just as well do it ourselves:
That's pretty much the conclusion I came to when I looked at libtai for implementing my library.
if we assume that we can convert a current UTC time to TAI, we can calculate the TAI time at the start of the program and use time_t to keep track of the TAI delta -- here we take advantage of the time_t bug which is not adjusted for leap seconds!
You can't assume that time_t is not being adjusted for leap seconds: the host might be running NTP, for example. The best thing to do seems to be to assume that time_t is a count of seconds since the epoch minus leap seconds, and calculate TAI from that. It might be wrong by up to a second around a leap second on a host running NTP, and slightly more wrong on a host not running NTP, but the latter probably don't care too much about second-accuracy anyway. Cheers, Simon