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 {-# INLINE posixTime #-} posixTime :: Simple Iso UTCTime POSIXTime posixTime = iso toPOSIX fromPOSIX where unixEpochDay = ModifiedJulianDay 40587 {-# INLINE toPOSIX #-} toPOSIX :: UTCTime -> POSIXTime toPOSIX t = t .-. review utcTime (UTCTime unixEpochDay zeroV) {-# INLINE fromPOSIX #-} fromPOSIX :: POSIXTime -> UTCTime fromPOSIX (NominalDiffTime d) = review utcTime $ UTCTime unixEpochDay (DiffTime d) -- TODO: reimplement without 'T.getPOSIXTime' to avoid 'Integer'? {-# INLINE getPOSIXTime #-} getPOSIXTime :: IO POSIXTime getPOSIXTime = fmap (NominalDiffTime . toMicro . toRational) T.getPOSIXTime