-- >>> unpickleDoc xp_date_padded tn
-- Just 1983-02-15 00:00:00 UTC
--
+-- >>> let tn = text_node "06/07/2014"
+-- >>> unpickleDoc xp_date_padded tn
+-- Just 2014-06-07 00:00:00 UTC
+--
xp_date_padded :: PU UTCTime
xp_date_padded =
(to_date, from_date) `xpWrapMaybe` xpText
--
-- Examples:
--
+-- >>> import Data.Maybe ( fromJust )
-- >>> :{
-- let parse_date :: String -> Maybe UTCTime;
-- parse_date = parseTime defaultTimeLocale date_format;
-- :}
--
--- >>> let (Just d1) = parse_date "1/1/1970"
--- >>> date_suffix d1
--- "st"
---
--- >>> let (Just d2) = parse_date "1/2/1970"
--- >>> date_suffix d2
--- "nd"
---
--- >>> let (Just d3) = parse_date "1/3/1970"
--- >>> date_suffix d3
--- "rd"
---
--- >>> let (Just d4) = parse_date "1/4/1970"
--- >>> date_suffix d4
--- "th"
+-- >>> let dates = [ "1/" ++ (d : "/1970") | d <- ['1'..'9'] ]
+-- >>> let suffixes = map (date_suffix . fromJust . parse_date) dates
+-- >>> suffixes
+-- ["st","nd","rd","th","th","th","th","th","th"]
--
date_suffix :: UTCTime -> String
date_suffix t =
-- >>> pickleDoc xp_early_line_date result
-- NTree (XTag "/" []) [NTree (XText "SUNDAY, MAY 25TH (05/25/2014)") []]
--
+-- >>> let tn = text_node "SATURDAY, JUNE 7TH (06/07/2014)"
+-- >>> let (Just result) = unpickleDoc xp_early_line_date tn
+-- >>> result
+-- 2014-06-07 00:00:00 UTC
+-- >>> pickleDoc xp_early_line_date result
+-- NTree (XTag "/" []) [NTree (XText "SATURDAY, JUNE 7TH (06/07/2014)") []]
+--
xp_early_line_date :: PU UTCTime
xp_early_line_date =
(to_time, from_time) `xpWrapMaybe` xpText
wacko_date_formats :: [String]
wacko_date_formats =
- ["%A, %B %d" ++ suffix ++ " (" ++ date_format_padded ++ ")" |
+ ["%A, %B %-d" ++ suffix ++ " (" ++ date_format_padded ++ ")" |
suffix <- ["ST", "ND", "RD","TH"] ]
to_time :: String -> Maybe UTCTime
formatTime caps_time_locale fmt t
where
upper_suffix = map toUpper (date_suffix t)
- fmt = "%A, %B %d" ++ upper_suffix ++ " (" ++ date_format_padded ++ ")"
+ fmt = "%A, %B %-d" ++ upper_suffix ++ " (" ++ date_format_padded ++ ")"
+
+
-- | Create an 'XmlTree' containing only the given text. This is
-- useful for testing (un)picklers, where we don't want to have to
-- Local imports.
import TSN.Codegen ( tsn_codegen_config )
import TSN.DbImport ( DbImport(..) )
-import TSN.Picklers ( xp_time_stamp )
+import TSN.Picklers (
+ xp_ambiguous_time,
+ xp_early_line_date,
+ xp_time_stamp )
import TSN.XmlImport ( XmlImport(..) )
import Xml (
FromXml(..),
pickle_date =
xpElem "date" $
xpWrap (from_tuple, to_tuple) $
- xpTriple (xpAttr "value" undefined)
+ xpTriple (xpAttr "value" xp_early_line_date)
(xpElem "note" xpText)
pickle_game
where
pickle_game =
xpElem "game" $
xpWrap (from_tuple, to_tuple) $
- xp4Tuple (xpElem "time" undefined)
+ xp4Tuple (xpElem "time" xp_ambiguous_time)
pickle_away_team
pickle_home_team
(xpElem "over_under" xpText)