timerep-2.0.0: Data/Time/Util.hs
module Data.Time.Util where
import Control.Applicative
import Data.Function
import Data.Monoid (mempty)
import Data.Monoid.Textual hiding (foldr, map)
import Data.Time.Format (defaultTimeLocale)
import Data.Time
toString :: (TextualMonoid t) => t -> String
toString = flip fix mempty $ \recurse output input -> case splitCharacterPrefix input of
Just (char, suffix) -> recurse (output ++ [char]) suffix
_ -> output
parseTimeUsing :: (TextualMonoid t, TextualMonoid t') => [t] -> t' -> Maybe ZonedTime
parseTimeUsing formats t = foldr (<|>) Nothing $ map parse formats
where parse :: (TextualMonoid t) => t -> Maybe ZonedTime
parse format = parseTime defaultTimeLocale (toString format) (toString t)