hora-2.0: src/Data/Time/Hora/Format.hs
module Data.Time.Hora.Format
(-- * type
Format(..),
-- * format
format,
format') where
import Data.Time.Format (formatTime,defaultTimeLocale,FormatTime(..))
import Data.Time.Clock
import Data.Time.LocalTime as L
import Data.Time.Hora.Type
import Data.String
-- | format as UTC
format::[Format] -> UTCTime -> String
format lf0 utc0 = withDefaultLocale (build lf0) utc0
-- | format as local time in specified timezone
format'::Tz' tz =>
[Format] -> tz -> UTCTime -> Tz String
format' lf0 tz0 utc0 = Tz tz1 $ withDefaultLocale (build lf0) zt1
where zt1 = utcToZonedTime tz1 utc0::ZonedTime
tz1 = tz' tz0 utc0
withDefaultLocale::FormatTime t =>
String -- ^ format. see 'formatTime'
-> t
-> String
withDefaultLocale = formatTime defaultTimeLocale
instance IsString Format where
fromString = Raw
{- ^ enter 'Raw' 'String' as ordinary 'String' with
@
\{\-\# LANGUAGE OverloadedStrings \#\-\}
@ -}
{- | \*0: 0 padded
see 'formatTime'
-}
data Format =
Raw String
| Tab
| Crlf -- ^ new line
| Offset -- ^ time zone
| Zone -- ^ time zone name
| Hm -- ^ %H:%M
| Hms -- ^ %H:%M:%S
| AM -- ^ AM PM
| Am -- ^ am pm
| H_24 -- ^ 24-hour *0
| H_12 -- ^ 12-hour *0
| Min -- ^ minute *0
| S -- ^ second *0
| Fraction_fixed -- ^ pico precision *0
| Fraction -- ^ .12 for 0.12 second. Pico precision, no trailing 0
| Y_m_d -- ^ %Y-%m-%d
| Y -- ^ year
| Month -- ^ month name long
| Mth -- ^ month name short
| Mth_1_12 -- ^ month *0
| D -- ^ day *0
| D_wk_1_7 -- ^ day of week for Week Date format, 1 - 7
| D_wk_0_6 -- ^ day of week number, 0 (= Sunday) - 6 (= Saturday)
| D_wk -- ^ day of week short
| D_week -- ^ day of week long
| Wk_year_Sun -- ^ week of year start sunday
| Wk_year_Mon -- ^ week of year start sunday
{-| build format string from 'Format' -}
class Build f where
build::f -> String
instance Build [Format] where
build = concat . (build <$>)
instance Build Format where
build f0 = case f0 of
Raw s1 -> s1
Tab -> "%t"
Crlf -> "%n"
Offset -> "%z"
Zone -> "%Z"
Hm -> "%R"
Hms -> "%T"
AM -> "%p"
Am -> "%P"
H_24 -> "%H"
H_12 -> "%I"
Min -> "%M"
S -> "%S"
Fraction_fixed -> "%q"
Fraction -> "%Q"
Y_m_d -> "%F"
Y -> "%Y"
Month -> "%B"
Mth -> "%b"
Mth_1_12 -> "%m"
D -> "%d"
D_wk_1_7 -> "%u"
D_wk_0_6 -> "%w"
D_wk -> "%a"
D_week -> "%A"
Wk_year_Sun -> "%U"
Wk_year_Mon -> "%W"