Blame attoparsec-iso8601/Data/Attoparsec/Time/Internal.hs
|
Packit |
9a2dfb |
{-# LANGUAGE CPP #-}
|
|
Packit |
9a2dfb |
|
|
Packit |
9a2dfb |
-- |
|
|
Packit |
9a2dfb |
-- Module: Data.Aeson.Internal.Time
|
|
Packit |
9a2dfb |
-- Copyright: (c) 2015-2016 Bryan O'Sullivan
|
|
Packit |
9a2dfb |
-- License: BSD3
|
|
Packit |
9a2dfb |
-- Maintainer: Bryan O'Sullivan <bos@serpentine.com>
|
|
Packit |
9a2dfb |
-- Stability: experimental
|
|
Packit |
9a2dfb |
-- Portability: portable
|
|
Packit |
9a2dfb |
|
|
Packit |
9a2dfb |
module Data.Attoparsec.Time.Internal
|
|
Packit |
9a2dfb |
(
|
|
Packit |
9a2dfb |
TimeOfDay64(..)
|
|
Packit |
9a2dfb |
, fromPico
|
|
Packit |
9a2dfb |
, toPico
|
|
Packit |
9a2dfb |
, diffTimeOfDay64
|
|
Packit |
9a2dfb |
, toTimeOfDay64
|
|
Packit |
9a2dfb |
) where
|
|
Packit |
9a2dfb |
|
|
Packit |
9a2dfb |
import Prelude ()
|
|
Packit |
9a2dfb |
import Prelude.Compat
|
|
Packit |
9a2dfb |
|
|
Packit |
9a2dfb |
import Data.Int (Int64)
|
|
Packit |
9a2dfb |
import Data.Time
|
|
Packit |
9a2dfb |
import Unsafe.Coerce (unsafeCoerce)
|
|
Packit |
9a2dfb |
|
|
Packit |
9a2dfb |
#if MIN_VERSION_base(4,7,0)
|
|
Packit |
9a2dfb |
|
|
Packit |
9a2dfb |
import Data.Fixed (Pico, Fixed(MkFixed))
|
|
Packit |
9a2dfb |
|
|
Packit |
9a2dfb |
toPico :: Integer -> Pico
|
|
Packit |
9a2dfb |
toPico = MkFixed
|
|
Packit |
9a2dfb |
|
|
Packit |
9a2dfb |
fromPico :: Pico -> Integer
|
|
Packit |
9a2dfb |
fromPico (MkFixed i) = i
|
|
Packit |
9a2dfb |
|
|
Packit |
9a2dfb |
#else
|
|
Packit |
9a2dfb |
|
|
Packit |
9a2dfb |
import Data.Fixed (Pico)
|
|
Packit |
9a2dfb |
|
|
Packit |
9a2dfb |
toPico :: Integer -> Pico
|
|
Packit |
9a2dfb |
toPico = unsafeCoerce
|
|
Packit |
9a2dfb |
|
|
Packit |
9a2dfb |
fromPico :: Pico -> Integer
|
|
Packit |
9a2dfb |
fromPico = unsafeCoerce
|
|
Packit |
9a2dfb |
|
|
Packit |
9a2dfb |
#endif
|
|
Packit |
9a2dfb |
|
|
Packit |
9a2dfb |
-- | Like TimeOfDay, but using a fixed-width integer for seconds.
|
|
Packit |
9a2dfb |
data TimeOfDay64 = TOD {-# UNPACK #-} !Int
|
|
Packit |
9a2dfb |
{-# UNPACK #-} !Int
|
|
Packit |
9a2dfb |
{-# UNPACK #-} !Int64
|
|
Packit |
9a2dfb |
|
|
Packit |
9a2dfb |
diffTimeOfDay64 :: DiffTime -> TimeOfDay64
|
|
Packit |
9a2dfb |
diffTimeOfDay64 t = TOD (fromIntegral h) (fromIntegral m) s
|
|
Packit |
9a2dfb |
where (h,mp) = fromIntegral pico `quotRem` 3600000000000000
|
|
Packit |
9a2dfb |
(m,s) = mp `quotRem` 60000000000000
|
|
Packit |
9a2dfb |
pico = unsafeCoerce t :: Integer
|
|
Packit |
9a2dfb |
|
|
Packit |
9a2dfb |
toTimeOfDay64 :: TimeOfDay -> TimeOfDay64
|
|
Packit |
9a2dfb |
toTimeOfDay64 (TimeOfDay h m s) = TOD h m (fromIntegral (fromPico s))
|