{-# LANGUAGE Safe #-} module Data.Time.Clock.Internal.UTCTime ( -- * UTC -- | UTC is time as measured by a clock, corrected to keep pace with the earth by adding or removing -- occasional seconds, known as \"leap seconds\". -- These corrections are not predictable and are announced with six month's notice. -- No table of these corrections is provided, as any program compiled with it would become -- out of date in six months. -- -- If you don't care about leap seconds, use 'UTCTime' and 'NominalDiffTime' for your clock calculations, -- and you'll be fine. UTCTime (..), ) where import Control.DeepSeq import Data.Data import Data.Time.Calendar.Days import Data.Time.Clock.Internal.DiffTime -- | This is the simplest representation of UTC. -- It consists of the day number, and a time offset from midnight. -- Note that if a day has a leap second added to it, it will have 86401 seconds. data UTCTime = UTCTime { UTCTime -> Day utctDay :: Day -- ^ the day , UTCTime -> DiffTime utctDayTime :: DiffTime -- ^ the time from midnight, 0 <= t < 86401s (because of leap-seconds) } deriving (Typeable UTCTime DataType Constr Typeable UTCTime -> (forall (c :: * -> *). (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> UTCTime -> c UTCTime) -> (forall (c :: * -> *). (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c UTCTime) -> (UTCTime -> Constr) -> (UTCTime -> DataType) -> (forall (t :: * -> *) (c :: * -> *). Typeable t => (forall d. Data d => c (t d)) -> Maybe (c UTCTime)) -> (forall (t :: * -> * -> *) (c :: * -> *). Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c UTCTime)) -> ((forall b. Data b => b -> b) -> UTCTime -> UTCTime) -> (forall r r'. (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> UTCTime -> r) -> (forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> UTCTime -> r) -> (forall u. (forall d. Data d => d -> u) -> UTCTime -> [u]) -> (forall u. Int -> (forall d. Data d => d -> u) -> UTCTime -> u) -> (forall (m :: * -> *). Monad m => (forall d. Data d => d -> m d) -> UTCTime -> m UTCTime) -> (forall (m :: * -> *). MonadPlus m => (forall d. Data d => d -> m d) -> UTCTime -> m UTCTime) -> (forall (m :: * -> *). MonadPlus m => (forall d. Data d => d -> m d) -> UTCTime -> m UTCTime) -> Data UTCTime UTCTime -> DataType UTCTime -> Constr (forall b. Data b => b -> b) -> UTCTime -> UTCTime (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> UTCTime -> c UTCTime (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c UTCTime forall a. Typeable a -> (forall (c :: * -> *). (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> a -> c a) -> (forall (c :: * -> *). (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c a) -> (a -> Constr) -> (a -> DataType) -> (forall (t :: * -> *) (c :: * -> *). Typeable t => (forall d. Data d => c (t d)) -> Maybe (c a)) -> (forall (t :: * -> * -> *) (c :: * -> *). Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a)) -> ((forall b. Data b => b -> b) -> a -> a) -> (forall r r'. (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r) -> (forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r) -> (forall u. (forall d. Data d => d -> u) -> a -> [u]) -> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u) -> (forall (m :: * -> *). Monad m => (forall d. Data d => d -> m d) -> a -> m a) -> (forall (m :: * -> *). MonadPlus m => (forall d. Data d => d -> m d) -> a -> m a) -> (forall (m :: * -> *). MonadPlus m => (forall d. Data d => d -> m d) -> a -> m a) -> Data a forall u. Int -> (forall d. Data d => d -> u) -> UTCTime -> u forall u. (forall d. Data d => d -> u) -> UTCTime -> [u] forall r r'. (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> UTCTime -> r forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> UTCTime -> r forall (m :: * -> *). Monad m => (forall d. Data d => d -> m d) -> UTCTime -> m UTCTime forall (m :: * -> *). MonadPlus m => (forall d. Data d => d -> m d) -> UTCTime -> m UTCTime forall (c :: * -> *). (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c UTCTime forall (c :: * -> *). (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> UTCTime -> c UTCTime forall (t :: * -> *) (c :: * -> *). Typeable t => (forall d. Data d => c (t d)) -> Maybe (c UTCTime) forall (t :: * -> * -> *) (c :: * -> *). Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c UTCTime) $cUTCTime :: Constr $tUTCTime :: DataType gmapMo :: (forall d. Data d => d -> m d) -> UTCTime -> m UTCTime $cgmapMo :: forall (m :: * -> *). MonadPlus m => (forall d. Data d => d -> m d) -> UTCTime -> m UTCTime gmapMp :: (forall d. Data d => d -> m d) -> UTCTime -> m UTCTime $cgmapMp :: forall (m :: * -> *). MonadPlus m => (forall d. Data d => d -> m d) -> UTCTime -> m UTCTime gmapM :: (forall d. Data d => d -> m d) -> UTCTime -> m UTCTime $cgmapM :: forall (m :: * -> *). Monad m => (forall d. Data d => d -> m d) -> UTCTime -> m UTCTime gmapQi :: Int -> (forall d. Data d => d -> u) -> UTCTime -> u $cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> UTCTime -> u gmapQ :: (forall d. Data d => d -> u) -> UTCTime -> [u] $cgmapQ :: forall u. (forall d. Data d => d -> u) -> UTCTime -> [u] gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> UTCTime -> r $cgmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> UTCTime -> r gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> UTCTime -> r $cgmapQl :: forall r r'. (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> UTCTime -> r gmapT :: (forall b. Data b => b -> b) -> UTCTime -> UTCTime $cgmapT :: (forall b. Data b => b -> b) -> UTCTime -> UTCTime dataCast2 :: (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c UTCTime) $cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *). Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c UTCTime) dataCast1 :: (forall d. Data d => c (t d)) -> Maybe (c UTCTime) $cdataCast1 :: forall (t :: * -> *) (c :: * -> *). Typeable t => (forall d. Data d => c (t d)) -> Maybe (c UTCTime) dataTypeOf :: UTCTime -> DataType $cdataTypeOf :: UTCTime -> DataType toConstr :: UTCTime -> Constr $ctoConstr :: UTCTime -> Constr gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c UTCTime $cgunfold :: forall (c :: * -> *). (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c UTCTime gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> UTCTime -> c UTCTime $cgfoldl :: forall (c :: * -> *). (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> UTCTime -> c UTCTime $cp1Data :: Typeable UTCTime Data, Typeable) instance NFData UTCTime where rnf :: UTCTime -> () rnf (UTCTime Day d DiffTime t) = Day -> () forall a. NFData a => a -> () rnf Day d () -> () -> () `seq` DiffTime -> () forall a. NFData a => a -> () rnf DiffTime t () -> () -> () `seq` () instance Eq UTCTime where (UTCTime Day da DiffTime ta) == :: UTCTime -> UTCTime -> Bool == (UTCTime Day db DiffTime tb) = (Day da Day -> Day -> Bool forall a. Eq a => a -> a -> Bool == Day db) Bool -> Bool -> Bool && (DiffTime ta DiffTime -> DiffTime -> Bool forall a. Eq a => a -> a -> Bool == DiffTime tb) instance Ord UTCTime where compare :: UTCTime -> UTCTime -> Ordering compare (UTCTime Day da DiffTime ta) (UTCTime Day db DiffTime tb) = case (Day -> Day -> Ordering forall a. Ord a => a -> a -> Ordering compare Day da Day db) of Ordering EQ -> DiffTime -> DiffTime -> Ordering forall a. Ord a => a -> a -> Ordering compare DiffTime ta DiffTime tb Ordering cmp -> Ordering cmp