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