{-# LANGUAGE OverloadedStrings #-} module Main ( main ) where import Control.Exception import Data.Time.Calendar import Data.Time.Clock import Data.Time.Format import Data.Time.LocalTime import Text.Format import Text.Format.Time hiding (formatTime) main :: IO () main = do utc <- getCurrentTime zoned <- getZonedTime let tz = zonedTimeZone zoned locale = utcToLocalTime tz utc universal = read (show locale) :: UniversalTime day = localDay locale time = localTimeOfDay locale putStrLn "\n<<<<<<<<<<<<<<<<<<<<<< Test <<<<<<<<<<<<<<<<<<<<<<" it "UTCTime default specs" $ format "{}" utc == formatTimeDef "%F %T%Q" utc it "ZonedTime default specs" $ format "{}" zoned == formatTimeDef "%F %T%Q %Z" zoned it "LocalTime default specs" $ format "{}" locale == formatTimeDef "%F %T%Q" locale it "UniversalTime default specs" $ format "{}" universal == formatTimeDef "%F %T%Q" universal it "Day default specs" $ format "{}" day == formatTimeDef "%F" day it "TimeZone default specs" $ format "{}" tz == formatTimeDef "%Z" tz it "Customize specs" $ format "{:%Y-%m-%d}" utc == formatTimeDef "%Y-%m-%d" utc putStrLn "\n>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" it :: String -> Bool -> IO () it = flip assert . putStrLn formatTimeDef :: FormatTime t => String -> t -> String formatTimeDef = formatTime defaultTimeLocale