module Time
  ( subtractUTCTime
  , minutes
  , hours
  , days
  , years
  , module X
  ) where

import Internal.Prelude

import Data.Time as X
  ( NominalDiffTime
  , UTCTime (..)
  , addUTCTime
  , diffUTCTime
  , getCurrentTime
  , nominalDay
  , nominalDiffTimeToSeconds
  , secondsToDiffTime
  , secondsToNominalDiffTime
  )
import Data.Time.Calendar.OrdinalDate as X (fromOrdinalDate)
import Data.Time.Clock.POSIX as X
  ( POSIXTime
  , posixSecondsToUTCTime
  , utcTimeToPOSIXSeconds
  )
import Data.Time.Clock.System as X (systemEpochDay)

subtractUTCTime :: NominalDiffTime -> UTCTime -> UTCTime
subtractUTCTime :: NominalDiffTime -> UTCTime -> UTCTime
subtractUTCTime NominalDiffTime
d UTCTime
t = NominalDiffTime -> UTCTime -> UTCTime
addUTCTime (NominalDiffTime -> NominalDiffTime
forall a. Num a => a -> a
negate NominalDiffTime
d) UTCTime
t

minutes :: NominalDiffTime -> NominalDiffTime
minutes :: NominalDiffTime -> NominalDiffTime
minutes = (NominalDiffTime -> NominalDiffTime -> NominalDiffTime
forall a. Num a => a -> a -> a
* NominalDiffTime
60)

hours :: NominalDiffTime -> NominalDiffTime
hours :: NominalDiffTime -> NominalDiffTime
hours = (NominalDiffTime -> NominalDiffTime -> NominalDiffTime
forall a. Num a => a -> a -> a
* NominalDiffTime
60) (NominalDiffTime -> NominalDiffTime)
-> (NominalDiffTime -> NominalDiffTime)
-> NominalDiffTime
-> NominalDiffTime
forall b c a. (b -> c) -> (a -> b) -> a -> c
. NominalDiffTime -> NominalDiffTime
minutes

days :: NominalDiffTime -> NominalDiffTime
days :: NominalDiffTime -> NominalDiffTime
days = (NominalDiffTime -> NominalDiffTime -> NominalDiffTime
forall a. Num a => a -> a -> a
* NominalDiffTime
24) (NominalDiffTime -> NominalDiffTime)
-> (NominalDiffTime -> NominalDiffTime)
-> NominalDiffTime
-> NominalDiffTime
forall b c a. (b -> c) -> (a -> b) -> a -> c
. NominalDiffTime -> NominalDiffTime
hours

years :: NominalDiffTime -> NominalDiffTime
years :: NominalDiffTime -> NominalDiffTime
years = (NominalDiffTime -> NominalDiffTime -> NominalDiffTime
forall a. Num a => a -> a -> a
* NominalDiffTime
365.2) (NominalDiffTime -> NominalDiffTime)
-> (NominalDiffTime -> NominalDiffTime)
-> NominalDiffTime
-> NominalDiffTime
forall b c a. (b -> c) -> (a -> b) -> a -> c
. NominalDiffTime -> NominalDiffTime
days