module Data.Time.Hora.Timestamp (-- ** numerical now, now', -- ** string t, tf, dt, d, d') where import Data.Time.Clock import Data.Time.Hora.Format import Data.Time.Hora.Type.DatePart import Data.Time.Hora.Type.Time import Data.Time.Hora.Parse import Data.Time.LocalTime as L {-| UTC >>> now DatePart {year = 2016, month = 12, day = 14, hour = 9, minute = 7, second = 10, pico = 233275605000} -} now::IO (DatePart Int) now = withUTCTime parse {-| current timezone >>> now' Tz CET (DatePart {year = 2016, month = 12, day = 14, hour = 10, minute = 7, second = 26, pico = 498313115000}) -} now'::IO (Tz (DatePart Int)) now' = withTimeZone parse' {- | time.fraction UTC >>> tf 09:10:58.030311306 -} tf::IO String tf = do utc0 <- getCurrentTime pure $ formatUTCTime "%T%Q" utc0 {- | time UTC >>> t 09:11:18 -} t::IO String t = do utc0 <- getCurrentTime pure $ formatUTCTime "%T" utc0 {- | date, time UTC >>> dt "2016-12-14 09:16:23" -} dt::IO String dt = do utc0 <- getCurrentTime pure $ formatUTCTime "%F %T" utc0 {- | date yyyymmdd UTC >>> d "20161214" -} d::IO String d = withUTCTime ymd {- | date yyyymmdd local timezone >>> d' Tz CET "20161214" -} d'::IO (Tz String) d' = withTimeZone ymd' type WithLocalTimeZone a = TimeZone -> UTCTime -> Tz a type WithUTCTime a = UTCTime -> a {- | do calc with current time zone from 'getCurrentTimeZone' probably don't need it -} withTimeZone::WithLocalTimeZone a -> IO (Tz a) withTimeZone fn0 = do z1 <- getCurrentTimeZone -- CET | CEST t1 <- getCurrentTime pure $ fn0 z1 t1 withUTCTime::WithUTCTime a -> IO a withUTCTime fn0 = do t1 <- getCurrentTime pure $ fn0 t1