{-# OPTIONS_GHC -Wno-redundant-constraints #-}
module Effectful.Time.Utils
( formatLocalTime,
formatZonedTime,
parseLocalTime,
parseZonedTime,
)
where
import Data.Time.Format qualified as Format
import Data.Time.LocalTime (LocalTime, ZonedTime)
import Effectful.Dispatch.Dynamic (HasCallStack)
formatLocalTime :: LocalTime -> String
formatLocalTime :: LocalTime -> String
formatLocalTime = TimeLocale -> String -> LocalTime -> String
forall t. FormatTime t => TimeLocale -> String -> t -> String
Format.formatTime TimeLocale
Format.defaultTimeLocale String
localTimeFormat
formatZonedTime :: ZonedTime -> String
formatZonedTime :: ZonedTime -> String
formatZonedTime = TimeLocale -> String -> ZonedTime -> String
forall t. FormatTime t => TimeLocale -> String -> t -> String
Format.formatTime TimeLocale
Format.defaultTimeLocale String
zonedTimeFormat
parseLocalTime :: (HasCallStack, MonadFail f) => String -> f LocalTime
parseLocalTime :: forall (f :: * -> *).
(HasCallStack, MonadFail f) =>
String -> f LocalTime
parseLocalTime =
Bool -> TimeLocale -> String -> String -> f LocalTime
forall (m :: * -> *) t.
(MonadFail m, ParseTime t) =>
Bool -> TimeLocale -> String -> String -> m t
Format.parseTimeM
Bool
True
TimeLocale
Format.defaultTimeLocale
String
localTimeFormat
parseZonedTime :: (HasCallStack, MonadFail f) => String -> f ZonedTime
parseZonedTime :: forall (f :: * -> *).
(HasCallStack, MonadFail f) =>
String -> f ZonedTime
parseZonedTime =
Bool -> TimeLocale -> String -> String -> f ZonedTime
forall (m :: * -> *) t.
(MonadFail m, ParseTime t) =>
Bool -> TimeLocale -> String -> String -> m t
Format.parseTimeM
Bool
True
TimeLocale
Format.defaultTimeLocale
String
zonedTimeFormat
localTimeFormat :: String
localTimeFormat :: String
localTimeFormat = String
"%0Y-%m-%d %H:%M:%S"
zonedTimeFormat :: String
zonedTimeFormat :: String
zonedTimeFormat = String
"%0Y-%m-%d %H:%M:%S %Z"