S02 says that if pressed, an Instant will numify into a count of
atomic seconds since "the TAI epoch" - but what is the TAI epoch? TAI
is normally expressed in the same terms as civil time - year, month,
date, hour, minute, second, fraction of second, according to the
Gregorian calendar, or else as a Julian Day number. As such, it
doesn't really have an epoch built into the concept.
(And S32 refers to TAI *as* an epoch, which is inaccurate. An epoch
is a particular instant; TAI is a system of measuring time.)
Using Instants as numbers is discouraged, but I still believe the
epoch should be part of the spec. Once we're requiring atomic time,
having the actual numeric value match is just a matter of adding a
constant to whatever the natural choice might be on a given
As far as I can see, there are a few reasonable values; roll out the bike shed!
My first guess would be midnight on January 1st, 1958, which was when
the international atomic time standard was initialized (and
synchronized to universal time, specifically UT2), though it wasn't
called TAI until 1971.
1 Jan 1977 was when TAI started ticking at the current speed (before
that the atomic clock measurements were uncorrected for relativistic
effects due to the altitude of the clocks above sea level).
1 Jan 2000 is a nice round number and corresponds to the current epoch
used for astronomical calculations (though that's technically noon
Terrestrial Time, which was 11:59:27.816 TAI, and I think an exact
second in TAI makes more sense for an epoch.)
Before that point there wasn't an atomic time standard, but of course
you can continue to count atomic seconds backwards in time as far as
you like. Since TAI moments are normally given using calendar dates,
you could use the epoch of the calendar, though you'll get a few more
digits in time values for the present. But what is the epoch of our
calendar? January 1st of the year 1? Of the year 0 (a.k.a. 1 BC)?
Perhaps November 30th, 1 BC (which is the normalized result of asking
for day 0 of month 0 of year 0 when January is month 1)? And
regardless of the above, is it that date in the Gregorian calendar we
now use, or the Julian calendar which was in effect (at least in Rome)
at the time? Or the incorrectly-implemented variation on the Julian
calendar which was *really* in effect at that time?
TAI moments are sometimes given as Julian Days, so it might make sense
to use JD 0.0, though since that was noon UT on January 1st, 4713 BC
in the Julian calendar (November 24, 4714 BC in the Gregorian), you'll
even more digits. Alternatively you could use Modified Julian Day
0.0, which was midnight UT on November 17, 1858 (the epoch of VMS
I note that Rakudo currently uses the time_t value directly. I think 1
Jan 1970 is a poor choice of epoch for TAI time; having time values so
close to but not the same as time_t values would create undue
Mark J. Reed <markjr...@gmail.com>