RFC: Time Library 0.3

Bjorn Bringert bringert at cs.chalmers.se
Tue Feb 7 04:43:55 EST 2006


Ashley Yakeley wrote:
> Please take a look at my third draft of a replacement for the standard 
> time library.
> http://semantic.org/TimeLib/
> ...
> 5. I don't have any text-parsing functionality for times. This is a fair 
> amount of work, so it would be good to know sensible requirements.
> ...

I have a simple date/time parsing library here: 
http://www.cs.chalmers.se/~bringert/darcs/parsedate/

Perhaps it can be used as a starting point?

This is the main date parsing function:

-- | Parse a date string as formatted by 'formatCalendarTime'.
--
--   The resulting 'CalendarTime' will only have those fields set that
--   are represented by a format specifier in the format string,
--   and those fields will be set to the values given in the date
--   string. If the same field is specified multiple times, the
--   rightmost occurence takes precedence.
--
--   The resulting date is not neccessarily a valid date. For example,
--   if there is no day of the week specifier in the format string,
--   the value of 'ctWDay' will most likely be invalid.
--
--   Format specifiers are % followed by some character. All other
--   characters are treated literally. Whitespace in the format string
--   matches zero or more arbitrary whitespace characters.
--
--   Format specifiers marked with * are matched, but do not set any
--   field in the output.
--
--   Some of the format specifiers are marked as space-padded or
--   zero-padded. Regardless of this, space-padded, zero-padded
--   or unpadded inputs are accepted. Note that strings using
--   unpadded fields without separating the fields may cause
--   strange parsing.
--
--   Supported format specfiers:
--
--    [%%]   a % character.
--
--    [%a]   locale's abbreviated weekday name (Sun ... Sat)
--
--    [%A]   locale's full weekday name (Sunday .. Saturday)
--
--    [%b]   locale's abbreviated month name (Jan..Dec)
--
--    [%B]   locale's full month name (January..December)
--
--    [%c]   locale's date and time format
--           (Thu Mar 25 17:47:03 CET 2004)
--
--    [%C]   century [00-99]
--
--    [%d]   day of month, zero padded (01..31)
--
--    [%D]   date (%m\/%d\/%y)
--
--    [%e]   day of month, space padded ( 1..31)
--
--    [%h]   same as %b
--
--    [%H]   hour, 24-hour clock, zero padded (00..23)
--
--    [%I]   hour, 12-hour clock, zero padded (01..12)
--
--    [%j]   day of the year, zero padded (001..366)
--
--    [%k]   hour, 24-hour clock, space padded ( 0..23)
--
--    [%l]   hour, 12-hour clock, space padded ( 1..12)
--
--    [%m]   month, zero padded (01..12)
--
--    [%M]   minute, zero padded (00..59)
--
--    [%n]   a newline character
--
--    [%p]   locale's AM or PM indicator
--
--    [%r]   locale's 12-hour time format (hh:mm:ss AM\/PM)
--
--    [%R]   hours and minutes, 24-hour clock (hh:mm)
--
--    [%s]   * seconds since '00:00:00 1970-01-01 UTC'
--
--    [%S]   seconds, zero padded (00..59)
--
--    [%t]   a horizontal tab character
--
--    [%T]   time, 24-hour clock (hh:mm:ss)
--
--    [%u]   numeric day of the week (1=Monday, 7=Sunday)
--
--    [%U]   * week number, weeks starting on Sunday,
--             zero padded (01-53)
--
--    [%V]   * week number (as per ISO-8601),
--             week 1 is the first week with a Thursday,
--             zero padded, (01-53)
--
--    [%w]   numeric day of the week, (0=Sunday, 6=Monday)
--
--    [%W]   * week number, weeks starting on Monday,
--             zero padded (01-53)
--
--    [%x]   locale's preferred way of printing dates (%m\/%d\/%y)
--
--    [%X]   locale's preferred way of printing time. (%H:%M:%S)
--
--    [%y]   year, within century, zero padded (00..99)
--
--    [%Y]   year, including century. Not padded
--           (this is probably a bug, but formatCalendarTime does
--           it this way). (0-9999)
--
--    [%Z]   time zone abbreviation (e.g. CET) or RFC-822 style numeric
--           timezone (-0500)
parseCalendarTime ::
     TimeLocale            -- ^ Time locale
     -> String             -- ^ Date format
     -> String             -- ^ String to parse
     -> Maybe CalendarTime -- ^ 'Nothing' if parsing failed.


/Björn


More information about the Libraries mailing list