> TAI is the fundamental time scale, with UTC derived from it.  As TAI
> advances, you can calculate UTC by subtracting TAI-UTC from it.  At TAI
> = 34 seconds, TAI-UTC is 35 and the corresponding UTC time is 23:59:59.
> That can be arithmetically correct only if you don't count the leap
> second, so let's not count it.

That sounds dangerous. There's a one-to-one mapping between valid UTC 
timestamps and valid TAI timestamps. Yes, you need a table to do the mapping, 
but the mapping is unambiguous (for recent and near future times).


> When the TAI time is 35 seconds, you would think the UTC time would be
> 0 seconds, but because of the leap second it is 23:59:60.  Thus, the
> value of TAI-UTC doesn't tell you everything you need to know to
> convert from TAI to UTC: you also have to know that there is a leap
> second in progress.

Huh? No, that doesn't sound right at all.

If your TAI-UTC table and code are correct, then every valid UTC timestamp has 
a TAI equivalent and vice versa. What is *invalid* is a 23:59:59 UTC timestamp 
(negative leap) or a 23:59:60 UTC timestamp (positive leap) that is not 
prescribed by the table.

A conversion from UTC to TAI will catch these errors and a conversion from TAI 
to UTC will not generate these errors. Also, any timestamp with hours<0 or 
hours>=24 or minutes<0 or minutes>=60 is invalid, without even looking at the 
table.

For this, it's best not to think of "a leap second" as in progress or as a 
duration; otherwise you may give preferential treatment to positive leap 
seconds only, or make special cases for one over the other. Instead think of a 
leap second as an *event* that forces a table lookup of how long that day is.


> I had thought that TAI-UTC was the only information needed to convert
> from TAI to UTC, and therefore that it could not be a step function
> because of positive leap seconds.  I see now that I was mistaken.  Is
> my new belief correct that you need both TAI-UTC and the knowledge that
> a leap second is in progress to convert from TAI to UTC?

Hmm, it sounds like your new belief is wrong too. That's why I suggested 
writing tests for your library; so you could catch these errors yourself. The 
table is all you need to decide how to convert between TAI/UTC and UTC/TAI. 
Yes, the code gets tricky near +/- N seconds of midnight, where N is |TAI-UTC|.

/tvb
_______________________________________________
LEAPSECS mailing list
[email protected]
https://pairlist6.pair.net/mailman/listinfo/leapsecs

Reply via email to