Data.Time questions

Ashley Yakeley ashley at
Mon May 12 05:15:09 EDT 2008

Bjorn Buckwalter wrote:
> I did already create a new type for TT. However, what you are saying
> makes sense too (I've been wondering about the 'AbsoluteTime' name).
> I'm not sure that how to best handle parsing and formatting of TT
> without another type though... I'll give it some thought.

> Hmm, I realize I might also have to reconsider my 'ParseTime' instance
> for 'AbsoluteTime' before I submit that patch...

I see the problem now. TT and TAI are the same up to isomorphism, but 
they both can be written in YMD HMS format, with a 32.184s difference. 
So how to parse?

So far I note the interesting property that any given String logically 
corresponds to at most one type:

   "2008-05-01": Day
   "05:45": TimeOfDay
   "UTC-7": TimeZone
   "2008-05-01 05:45": LocalTime
   "2008-05-01 05:45 UTC-7": ZonedTime

I'm not sure if that really matters, especially as one would need a new 
union type make use of it, but we could do an "instance ParseTime 
AbsoluteTime" if we insist on virtual time-zone strings:

   "2008-01-01 00:00:00 TAI": AbsoluteTime
   "2008-01-01 00:00:32.184 TT": AbsoluteTime
   "2007-12-31 23:59:41 GPS": AbsoluteTime

I'm not sure what to do about FormatTime, though.

Another approach is to consider the TAI, TT, GPS time-scales as a 
parallel system of "zones". So we currently have

   data ZonedTime = ZonedTime LocalTime TimeZone
   utcToZonedTime :: TimeZone -> UTCTime -> ZonedTime
   zonedTimeToUTC :: ZonedTime -> UTCTime

We could add something like

   data ScaledTime = ScaledTime LocalTime TimeScale
   absoluteToScaledTime :: TimeScale -> AbsoluteTime -> ScaledTime
   scaledTimeToAbsolute :: ScaledTime -> AbsoluteTime

This would then give us

   "2008-01-01 00:00:00 TAI": ScaledTime
   "2008-01-01 00:00:32.184 TT": ScaledTime
   "2007-12-31 23:59:41 GPS": ScaledTime

This would belong in the "specialist" module Data.Time.Clock.TAI, which 
isn't included in Data.Time, so it shouldn't bother ordinary users of time.

Ashley Yakeley

More information about the Libraries mailing list