If we are going to use this, I'd like to see us standardize on the
highest-precision (i.e. attosecond) version. While it's not necessary in
any application that I can currently think of and will probably never be
necessary in 90% of Perl applications, when you need it, you need it, and
if the core language doesn't support it, it can be a pain to get it.
Well, actually...I suppose if there are huge penalties for using the
attosecond version, maybe it wouldn't be worth it, but it doesn't sound
from this post like that is the case.
Dave
On Fri, 18 Aug 2000, Mark-Jason Dominus wrote:
>
> TAI is an international time standard. It has a number of technical
> advantages over UTC. One of these advantages is that it doesn't have
> any silly truck with leap seconds.
>
> Dan Bernstein has defined a time format called TAI64 which is based on
> TAI. The format is very simple. TAI64 is almost compatible with Unix
> epoch time. TAI64 has a resolution of one second and a range of about
> 300 billion years.
>
> Bernstein has a small, good-quality library of code for manipulating
> TAI64 values and for converting them to and from UTC or unix epoch
> time. The library is in the public domain, so there can't be any
> license or copyright objection to including it in Perl.
>
> TAI64 has one-second precision, but there are extensions to it,
> TAI64N and TAI64A, with nanosecond and attosecond precision. libtai
> handles these extensions also.
>
> libtai has functions to convert calendar dates and times (such as
> "March 27 1823") into TAI values and back and to input and output date
> and time strings. It has functions for addition, subtraction, and
> comparison of TAI times. The interfce is simple and well-documented.
>
> If we're going to standardize on a single time format for all
> platforms, I wish we could choose a good format. Unix time runs out
> in 2038.
>
> The libtai blurb is at:
>
> http://cr.yp.to/libtai.html
>
> I've included this below.
>
> Public-domain source code for libtai:
>
> http://cr.yp.to/libtai/libtai-0.60.tar.gz
>
> The spec for TAI64:
>
> http://cr.yp.to/libtai/tai64.html
>
>
> BLURB:
>
> libtai is a library for storing and manipulating dates and times.
>
> libtai supports two time scales: (1) TAI64, covering a few hundred
> billion years with 1-second precision; (2) TAI64NA, covering the same
> period with 1-attosecond precision. Both scales are defined in terms of
> TAI, the current international real time standard.
>
> libtai provides an internal format for TAI64, struct tai, designed for
> fast time manipulations. The tai_pack() and tai_unpack() routines
> convert between struct tai and a portable 8-byte TAI64 storage format.
> libtai provides similar internal and external formats for TAI64NA.
>
> libtai provides struct caldate to store dates in year-month-day form. It
> can convert struct caldate, under the Gregorian calendar, to a modified
> Julian day number for easy date arithmetic.
>
> libtai provides struct caltime to store calendar dates and times along
> with UTC offsets. It can convert from struct tai to struct caltime in
> UTC, accounting for leap seconds, for accurate date and time display. It
> can also convert back from struct caltime to struct tai for user input.
> Its overall UTC-to-TAI conversion speed is 100x better than the usual
> UNIX mktime() implementation.
>
> This version of libtai requires a UNIX system with gettimeofday(). It
> will be easy to port to other operating systems with compilers
> supporting 64-bit arithmetic.
>
> The libtai source code is in the public domain.
>