module Canteven.ParseDate (
parseDate,
supportedDateFormats,
iso8601UtcDateFormats,
twitterDateFormat
) where
import Data.Maybe (listToMaybe, mapMaybe)
import Data.Time.Format (rfc822DateFormat, ParseTime, parseTimeM, defaultTimeLocale)
parseDate :: (ParseTime t) => String -> Maybe t
parseDate str =
parseAll supportedDateFormats
where
parseAll fmts = listToMaybe (mapMaybe parse fmts)
parse fmt = parseTimeM True defaultTimeLocale fmt str
supportedDateFormats :: [String]
supportedDateFormats =
rfc822DateFormat:twitterDateFormat:epochFormat:iso8601UtcDateFormats
iso8601UtcDateFormats :: [String]
iso8601UtcDateFormats =
[
"%Y-%m-%dT%H:%M:%S%Q%Z",
"%Y-%m-%dT%H:%M:%S%Q",
"%Y-%m-%dT%H:%M",
"%Y-%m-%dT%H",
"%Y-%m-%d",
"%Y-%m"
]
twitterDateFormat :: String
twitterDateFormat = "%a %b %d %T %Z %Y"
epochFormat :: String
epochFormat = "%s"