module Data.Thyme.Clock.POSIX
( posixDayLength
, module Data.Thyme.Clock.POSIX
) where
import Prelude
import Control.Lens
import Data.AdditiveGroup
import Data.AffineSpace
import Data.Micro
import qualified Data.Time.Clock.POSIX as T
import Data.Thyme.Calendar.Internal
import Data.Thyme.Clock.Scale
import Data.Thyme.Clock.UTC
type POSIXTime = NominalDiffTime
posixTime :: Simple Iso UTCTime POSIXTime
posixTime = iso toPOSIX fromPOSIX where
unixEpochDay = ModifiedJulianDay 40587
toPOSIX :: UTCTime -> POSIXTime
toPOSIX t = t .-. review utcTime (UTCTime unixEpochDay zeroV)
fromPOSIX :: POSIXTime -> UTCTime
fromPOSIX (NominalDiffTime d) = review utcTime $
UTCTime unixEpochDay (DiffTime d)
getPOSIXTime :: IO POSIXTime
getPOSIXTime = fmap (NominalDiffTime . toMicro . toRational) T.getPOSIXTime