module Data.HodaTime.Instant.Internal
(
Instant(..)
,fromUnixGetTimeOfDay
)
where
import Data.Word (Word32)
import Data.Int (Int32)
import Data.HodaTime.Constants (secondsPerDay, nsecsPerMicrosecond, unixDaysOffset)
import Control.Arrow ((>>>), first)
data Instant = Instant { iDays :: Int32, iSecs :: Word32, iNsecs :: Word32 }
deriving (Eq, Ord, Show)
fromUnixGetTimeOfDay :: Int -> Word32 -> Instant
fromUnixGetTimeOfDay s ms = Instant days (fromIntegral secs) nsecs
where
(days, secs) = flip divMod secondsPerDay >>> first (fromIntegral . subtract unixDaysOffset) $ s
nsecs = ms * nsecsPerMicrosecond