Time Libraries Rough Draft
Keean Schupke
k.schupke at imperial.ac.uk
Wed Feb 9 14:36:25 EST 2005
Seems very nice, I would still argue that Calendars can be a class as
all calendars will end up implementing the same (or similar)
functions... but the work of defining a generalised interface to
calendars is harder than defining a specific interface to a single
calendar... In reality I don't think it can be done until several
calendars have been implemented.
Perhaps defining the library for UTC first, then if other calendars are
implemented later a generalised interface can be defined later?
Keean.
Ashley Yakeley wrote:
>This seems to be roughly where we're at with the time libraries. It's
>now three modules, Clock, LeapSeconds, and Calendar. Most people will
>have no need for LeapSeconds.
>
>I've added two more things which haven't been discussed much. The first
>is a getCPUTime function that returns the current "CPU time". This has
>an arbitrary base, but it doesn't hiccup. The Unix interface for this is
>a "clock()" function that returns time in some unit, and
>CLOCKS_PER_SECOND, which is a constant to convert to seconds. I'm
>assuming there's a Windows equivalent to this.
>
>The second thing is a type-synonym of Rational for Julian dates. Julian
>dates are a standard representation of UT1, where one unit is one day,
>and UT1 is a good choice for representing Earth-based times in the far
>past or future continuously.
>
>
>System.Time.Clock:
>
> * UTC arithmetic
>
> * types or type-synonyms for Julian days and dates (for UT1)
>
> * getting the current UTC time
>
> * getting the current "CPU time"
>
>System.Time.LeapSeconds:
>
> * TAI arithmetic
>
> * leap-second table type
>
> * conversion between UTC and TAI with table
>
>System.Time.Calendar (largely undiscussed so far):
>
> * time zones
>
> * getting the locale time zone
>
> * converting times to Gregorian "calendrical" format
>
> * calendrical arithmetic
> e.g. one month after March 31st
>
> * possibly "incomplete dates"
> e.g. "May 1" for all years
>
> * parsing and showing dates and times
>
>Left for other libraries (standard or user):
>
> * sunrise/sunset, moon phase, solstices & equinoxes, etc.
>
> * figuring out time zone from position on Earth
>
> * civil summertime zone adjustment calculation,
> interface to zoneinfo database
>
> * calendar systems other than Gregorian
>
> * generalised sets over time
> e.g. "2pm-4pm every 4th Saturday of the month"
>
>
>
>module System.Time.Clock ( ... ) where
>
> -- | standard Julian count of Earth days
> type JulianDay = Integer
>
> newtype DiffTime = MkDiffTime Integer
>
> timeToSISeconds :: DiffTime -> Rational
>
> siSecondsToTime :: Rational -> DiffTime
>
> data UTCTime = MkUTCTime JulianDay DiffTime
>
> newtype UTCDiffTime = MkUTCDiffTime Integer
>
> utcTimeToUTCSeconds :: UTCDiffTime -> Rational
>
> utcSecondsToUTCTime :: Rational -> UTCDiffTime
>
> addUTCTime :: UTCDiffTime -> UTCTime -> UTCTime
>
> diffUTCTime :: UTCTime -> UTCTime -> UTCDiffTime
>
> ...more arithmetic on UTCDiffTime...
>
> -- | standard Julian dates for UT1, 1 = 1 day
> type JulianDate = Rational
>
> getCurrentTime :: IO UTCTime
>
> getCPUTime :: IO DiffTime
>
>
>-- | most people won't need this module
>module System.Time.LeapSeconds ( ... ) where
>
> -- | TAI
> type AbsoluteTime = MkAbsoluteTime Integer
>
> addAbsoluteTime :: DiffTime -> AbsoluteTime -> AbsoluteTime
>
> diffAbsoluteTime :: AbsoluteTime -> AbsoluteTime -> DiffTime
>
> -- | TAI - UTC during this day
> type LeapSecondTable = JulianDay -> Int
>
> utcDayLength :: LeapSecondTable -> JulianDay -> DiffTime
>
> utcToTAITime :: LeapSecondTable -> UTCTime -> TAITime
>
> taiToUTCTime :: LeapSecondTable -> TAITime -> UTCTime
>
>
>module System.Time.Calendar
> ... TBD ...
>
>
>
More information about the Libraries
mailing list