module Data.TimeSeries.Time
( TimeResolution
, days
, months
, nextTime
, seconds
, years
) where
import Data.Time( UTCTime(..)
, NominalDiffTime
, addDays
, addGregorianMonthsClip
, addUTCTime)
data TimeResolution = Years Integer
| Months Integer
| Days Integer
| Seconds NominalDiffTime
days :: Integer -> TimeResolution
days n = Days n
months :: Integer -> TimeResolution
months n = Months n
seconds :: Int -> TimeResolution
seconds n = Seconds (fromIntegral n)
years :: Integer -> TimeResolution
years n = Years n
nextTime :: TimeResolution -> UTCTime -> UTCTime
nextTime (Years n) (UTCTime d s) = UTCTime (addGregorianMonthsClip (12 * n) d) s
nextTime (Months n) (UTCTime d s) = UTCTime (addGregorianMonthsClip n d) s
nextTime (Days n) (UTCTime d s) = UTCTime (addDays n d) s
nextTime (Seconds n) utc = addUTCTime n utc