new addLocalTime, diffLocalTime
authorAshley Yakeley <ashley@semantic.org>
Sat, 13 Jan 2018 03:20:23 +0000 (19:20 -0800)
committerAshley Yakeley <ashley@semantic.org>
Sat, 13 Jan 2018 03:20:23 +0000 (19:20 -0800)
changelog.md
lib/Data/Time/LocalTime/Internal/LocalTime.hs

index 6d7b29b..f9ad879 100644 (file)
@@ -3,6 +3,7 @@
 ## [1.9]
 - new DayOfWeek type
 - new CalendarDuration type
+- new addLocalTime, diffLocalTime
 - formatting: %Ez and %EZ for ±HH:MM format
 - parseTimeM: use MonadFail constraint when supported
 - parsing: reject invalid (and empty) time-zones with %z and %Z
index 7e9efb6..bbf531a 100644 (file)
@@ -7,6 +7,8 @@ module Data.Time.LocalTime.Internal.LocalTime
     -- * Local Time
     LocalTime(..),
 
+    addLocalTime,diffLocalTime,
+
     -- converting UTC and UT1 times to LocalTime
     utcToLocalTime,localTimeToUTC,ut1ToLocalTime,localTimeToUT1,
 ) where
@@ -20,7 +22,9 @@ import Data.Data
 #endif
 import Data.Time.Calendar.Days
 import Data.Time.Calendar.Gregorian
+import Data.Time.Clock.Internal.NominalDiffTime
 import Data.Time.Clock.Internal.UniversalTime
+import Data.Time.Clock.Internal.UTCDiff
 import Data.Time.Clock.Internal.UTCTime
 import Data.Time.LocalTime.Internal.TimeOfDay
 import Data.Time.LocalTime.Internal.TimeZone
@@ -49,6 +53,14 @@ instance NFData LocalTime where
 instance Show LocalTime where
     show (LocalTime d t) = (showGregorian d) ++ " " ++ (show t)
 
+-- | addLocalTime a b = a + b
+addLocalTime :: NominalDiffTime -> LocalTime -> LocalTime
+addLocalTime x = utcToLocalTime utc . addUTCTime x . localTimeToUTC utc
+
+-- | diffLocalTime a b = a - b
+diffLocalTime :: LocalTime -> LocalTime -> NominalDiffTime
+diffLocalTime a b = diffUTCTime (localTimeToUTC utc a) (localTimeToUTC utc b)
+
 -- | Get the local time of a UTC time in a time zone.
 utcToLocalTime :: TimeZone -> UTCTime -> LocalTime
 utcToLocalTime tz (UTCTime day dt) = LocalTime (addDays i day) tod where