--
module TSN.Picklers (
xp_date,
+ xp_date_padded,
xp_gamedate,
+ xp_racedate,
xp_tba_time,
xp_time,
xp_time_stamp )
time_stamp_format )
+-- | The format string for a base date in m/d/yyyy format. The
+-- day/month are not padded at all. This will match for example,
+--
+-- * 2/15/1983
+-- * 1/1/0000
+--
+date_format :: String
+date_format = "%-m/%-d/%Y"
+
+
+-- | The format string for a base date in mm/dd/yyyy format. The
+-- day/month are padded to two characters with zeros. This will
+-- match for example,
+--
+-- * 02/15/1983
+-- * 01/01/0000
+--
+date_format_padded :: String
+date_format_padded = "%0m/%0d/%Y"
+
+
-- | (Un)pickle a UTCTime without the time portion.
--
xp_date :: PU UTCTime
xp_date =
(to_date, from_date) `xpWrapMaybe` xpText
where
- format = "%-m/%-d/%Y"
+ to_date :: String -> Maybe UTCTime
+ to_date = parseTime defaultTimeLocale date_format
+
+ from_date :: UTCTime -> String
+ from_date = formatTime defaultTimeLocale date_format
+
+-- | (Un)pickle a UTCTime without the time portion. The day/month are
+-- padded to two characters with zeros.
+--
+xp_date_padded :: PU UTCTime
+xp_date_padded =
+ (to_date, from_date) `xpWrapMaybe` xpText
+ where
to_date :: String -> Maybe UTCTime
- to_date = parseTime defaultTimeLocale format
+ to_date = parseTime defaultTimeLocale date_format_padded
from_date :: UTCTime -> String
- from_date = formatTime defaultTimeLocale format
+ from_date = formatTime defaultTimeLocale date_format_padded
+
+
+-- | (Un)pickle a 'UTCTime' from a \<RaceDate\> element in an
+-- 'AutoRaceResults' message.
+--
+-- Example:
+--
+-- <RaceDate>6/1/2014 1:00:00 PM</RaceDate>
+-- <RaceDate>5/24/2014 2:45:00 PM</RaceDate>
+--
+xp_racedate :: PU UTCTime
+xp_racedate =
+ (to_racedate, from_racedate) `xpWrapMaybe` xpText
+ where
+ format = date_format ++ " " ++ "%-I:%M:%S %p"
+
+ to_racedate :: String -> Maybe UTCTime
+ to_racedate = parseTime defaultTimeLocale format
+
+ from_racedate :: UTCTime -> String
+ from_racedate = formatTime defaultTimeLocale format
-- | (Un)pickle a UTCTime from a weather forecast's gamedate. Example