module Data.Time.Hora.Format where import Data.Time.Format (formatTime,defaultTimeLocale) import Data.Time.Clock import Data.Time.Hora.Type.DmyHm as M import Data.Time.LocalTime as L import qualified Text.Regex.Do.Replace.Template as F import qualified Text.Regex.Do.Pad as F import Data.Time.Calendar import Data.Time.Hora.Type.Time {- | yyyymmdd -} ymd::TimeZone -> UTCTime -> Tz String ymd tz0 utc0 = let lt2 = L.utcToLocalTime tz0 utc0 day2 = localDay lt2 (y3,m3,d3) = toGregorian day2 f4 i4 = F.pad '0' 2 $ show i4 in Tz tz0 $ "{0}{1}{2}" F.< (f4 <$> [fromIntegral y3,m3,d3]) {- | format UTCTime just as you need it. uses 'defaultTimeLocale' @ import Text.Regex.Do.Replace.Template import Prelude hiding ((\<),(\>)) ... it "formatUTCTime" $ do t1 <- getCurrentTime let p1@DmyHm{..} = partFormats traceIO $ formatUTCTime (("{day}/{month} {hour}:{minute}") < [("day",day),("month",month),("hour",hour),("minute",minute)]) t1 12/12 18:39 @ -} formatUTCTime::String -- ^ see 'formatTime'. can also make format with functions in this module -> UTCTime -> String formatUTCTime format0 = formatTime defaultTimeLocale format0 -- | %T%Q hmsFraction::String hmsFraction = "%T%Q" -- | %T %Q hmsFraction'::String hmsFraction' = "%T %Q" -- | %F %T ymdHms::String ymdHms = "%F %T" {- | %S.%-q second.pico -} spicoFormat::String spicoFormat = "%S.%-q" {- | some formats /no padding/ see 'formatTime' for full measure @ day %-d month %-m year %Y hour %-H minute %-M @ -} partFormats::DmyHm String partFormats = DmyHm { M.day = "%-d", M.month = "%-m", M.year = "%Y", M.hour = "%-H", M.minute = "%-M" }