module Data.Time.Follow
( parseTimeGuess
) where
import Control.Applicative ((<|>))
import Data.Text (Text)
import qualified Data.Text as T (unpack)
import Data.Time (ParseTime, defaultTimeLocale, formatTime,
iso8601DateFormat, parseTimeM,
rfc822DateFormat)
parseTimeGuess :: ParseTime t => Text -> Maybe t
parseTimeGuess string =
let formats =
[ iso8601DateFormat Nothing
, iso8601DateFormat $ Just "%H:%M:%S%Z"
, iso8601DateFormat $ Just "%H:%M:%S%Q%Z"
, rfc822DateFormat
, "%s"
]
results = parseTime' (T.unpack string) <$> formats
in foldl1 (<|>) results
where
parseTime' = flip $ parseTimeM True defaultTimeLocale