time-compat-0.1.0: src/Data/Time/Compat.hs
{-# LANGUAGE RecordWildCards #-}
-- | Compatibility with the
-- <old-time http://hackage.haskell.org/package/old-time> package for the
-- \"new\" <time http://hackage.haskell.org/package/time> package.
--
-- This is useful for writing portable code; in particular, if you're
-- using the <directory http://hackage.haskell.org/package/directory>
-- package and you want your code to build with both GHC 7.6 and earlier
-- versions. The version of @directory@ used with GHC 7.6 changed
-- a dependency from @old-time@ to @time@ which means its
-- @getModificationTime@ function now returns a 'Time.UTCTime' instead of
-- a 'OldTime.ClockTime'. This type affects the public API of many
-- libraries that use it. To make such libraries portable, port your
-- code to use the @time@ package and to only rely on 'Time.UTCTime' in
-- its public API, and call 'toUTCTime' on the values returned by
-- functions like @getModificationTime@, for example:
--
-- >fmap toUTCTime getModificationTime
--
-- If you're using @directory-1.2@, 'toUTCTime' will just be 'id' and the
-- original value is returned intact. If you're using an older
-- @directory@, for example because you're building with GHC 7.4, the
-- 'OldTime.ClockTime' returned by @getModificationTime@ will be
-- converted to a 'Time.UTCTime' and will be compatible with your code
-- ported to the new @time@ package.
module Data.Time.Compat
( -- * Converting between representations
ToUTCTime(..)
)
where
import qualified Data.Time as Time
import qualified System.Time as OldTime
class ToUTCTime a where
toUTCTime :: a -> Time.UTCTime
instance ToUTCTime Time.UTCTime where
toUTCTime = id
instance ToUTCTime OldTime.ClockTime where
toUTCTime = toUTCTime . OldTime.toUTCTime
instance ToUTCTime OldTime.CalendarTime where
toUTCTime OldTime.CalendarTime{..} =
Time.UTCTime day diffTime
where
year = fromIntegral ctYear
month = fromEnum ctMonth
day = Time.fromGregorian year month ctDay
sec = ctHour*60^2 + ctMin*60 + ctSec
pico = fromIntegral sec*10^12 + ctPicosec
diffTime = Time.picosecondsToDiffTime pico