Time library discussion (reprise)

Juanma Barranquero jmbarranquero at laley.wke.es
Tue Nov 11 14:17:36 EST 2003

On Tue, 11 Nov 2003 12:44:59 -0000
"Simon Marlow" <simonmar at microsoft.com> wrote:

> This has been demonstrated - recently by Juanma Barranquero's library
> posted to the Haskell list,

I think you're referring to Stefan Karrmann's library. I just did a
couple comments about it.

> Personally I think it's ok to have a library that "does its best" to
> give you the correct TAI time, with documented caveats.  IIRC, this is
> where we got stuck.

FWIW, after taking a look to Stefan's Tai.lhs, I think it is interesting
but way too complex. Many languages make do with things more or less
equivalent to the following (ripped from the Time::Piece Perl module,
which implements an interface outlined by Larry Wall time ago):

        $t->sec                 # also available as $t->second
        $t->min                 # also available as $t->minute
        $t->hour                # 24 hour
        $t->mday                # also available as $t->day_of_month
        $t->mon                 # 1 = January
        $t->_mon                # 0 = January
        $t->monname             # Feb
        $t->month               # same as $t->monname
        $t->fullmonth           # February
        $t->year                # based at 0 (year 0 AD is, of course 1 BC)
        $t->_year               # year minus 1900
        $t->yy                  # 2 digit year
        $t->wday                # 1 = Sunday
        $t->_wday               # 0 = Sunday
        $t->day_of_week         # 0 = Sunday
        $t->wdayname            # Tue
        $t->day                 # same as wdayname
        $t->fullday             # Tuesday
        $t->yday                # also available as $t->day_of_year, 0 = Jan 01
        $t->isdst               # also available as $t->daylight_savings

        $t->hms                 # 12:34:56
        $t->hms(".")            # 12.34.56
        $t->time                # same as $t->hms

        $t->ymd                 # 2000-02-29
        $t->date                # same as $t->ymd
        $t->mdy                 # 02-29-2000
        $t->mdy("/")            # 02/29/2000
        $t->dmy                 # 29-02-2000
        $t->dmy(".")            # 29.02.2000
        $t->datetime            # 2000-02-29T12:34:56 (ISO 8601)
        $t->cdate               # Tue Feb 29 12:34:56 2000
        "$t"                    # same as $t->cdate

        $t->epoch               # seconds since the epoch
        $t->tzoffset            # timezone offset in a Time::Seconds object

        $t->julian_day          # number of days since Julian period began
        $t->mjd                 # modified Julian date (JD-2400000.5 days)

        $t->week                # week number (ISO 8601)

        $t->is_leap_year        # true if it its
        $t->month_last_day      # 28-31

        $t->time_separator($s)  # set the default separator (default ":")
        $t->date_separator($s)  # set the default separator (default "-")
        $t->day_list(@days)     # set the default weekdays
        $t->mon_list(@days)     # set the default months

        $t->strftime(FORMAT)    # same as POSIX::strftime (without the overhead
                                # of the full POSIX extension)
        $t->strftime()          # "Tue, 29 Feb 2000 12:34:56 GMT"

        Time::Piece->strptime(STRING, FORMAT)
                                # see strptime man page. Creates a new
                                # Time::Piece object

and even that could be reduced considerably.

IMHO, Haskell should have a simple module which allowed to manipulate
dates and times in UTC (and convert to/from localtimes, and perhaps
MJD/JD), and, as an extension, a TAI module for the (probably very few)
people who needs that kind of precision.

I know that I've been programming quite a few years and I've never
needed to know TAI times, nor ignoring the leap seconds have been a
problem. And, till very recently, I was working for a VoIP carrier, so
you can bet we manipulated dates, times and durations *constantly*. I'm
not saying there aren't problem domains where that level of precision is
required. Just they're not that common, I think.


More information about the Libraries mailing list