module Data.Time.Hora.Convert (-- ** multipliers picoSec, picoMs, msSec, -- ** conversion toPico, toMilli, toSec, -- ** diff time toDiffTime, nominalDiff ) where import Data.Ratio import Data.Time.Clock import Data.Time.Hora.Type.Time -- | pico in 1 second picoSec::Integral a => a picoSec = 1000000000000 -- 12 -- | pico in 1 milli picoMs::Integral a => a picoMs = 1000000000 -- 9 -- | milli in 1 sec msSec::Integral a => a msSec = 1000 {- | >>> toPico (Milli 1) 1000000000 -} toPico::TwoInt a b => TimeSpan a -> b toPico (Pico i0) = fromIntegral i0 toPico (Milli i0) = fromIntegral $ i0 * picoMs toPico (Sec i0) = fromIntegral $ i0 * picoSec {- | >>> toMilli (Sec 1) 1000 -} toMilli::TwoInt a b => TimeSpan a -> b toMilli (Pico i0) = fromIntegral $ i0 `div` picoMs toMilli (Milli i0) = fromIntegral $ i0 toMilli (Sec i0) = fromIntegral $ i0 * msSec toSec::TwoInt a b => TimeSpan a -> b toSec (Pico i0) = fromIntegral $ i0 `div` picoSec toSec (Milli i0) = fromIntegral $ i0 `div` msSec toSec (Sec i0) = fromIntegral $ i0 toDiffTime::Integral a => TimeSpan a -> DiffTime toDiffTime (Sec s0) = secondsToDiffTime $ fromIntegral s0 toDiffTime (Pico s0) = picosecondsToDiffTime $ fromIntegral s0 toDiffTime t0@(Milli s0) = picosecondsToDiffTime $ toPico t0 nominalDiff::Integral a => TimeSpan a -> NominalDiffTime nominalDiff ts0 = let s1 = toPico ts0::Integer in fromRational $ s1 % picoSec