Skip to content

utcToLocalTime converting in the wrong direction on Windows

I found a strange UTC to Local Time conversion bug on the Windows version of GHC 6.6.1.

Code to reproduce it:

    import Monad
    import Data.Time
    import Locale

    main = do
        t <- (liftM2 utcToLocalTime) getCurrentTimeZone getCurrentTime
        let s = formatTime defaultTimeLocale "%r" t
        putStrLn s
        z <- (liftM timeZoneName) getCurrentTimeZone
        putStrLn z

Running this program around 04:35 PM I get the following results

On Linux (a recent Ubuntu with GHC 6.6.1 compiled from source)

04:35:48 PM
EDT

On Windows (GHC 6.6.1 from installer) I get

12:36:04 AM
Eastern Daylight Time

Looks like the Windows version is counting in the wrong direction. I made some tests in GHCi on both machines an get this:

On Windows:

Prelude> :m Monad Data.Time Locale
Prelude Locale Data.Time Monad> z <- getCurrentTimeZone
Eastern Daylight Time
Prelude Locale Data.Time Monad> timeZoneMinutes z
240

On Linux: (same commands)

Prelude Locale Data.Time Monad> timeZoneMinutes z
-240

Cheers,

Olivier.

Edited by Ian Lynagh -
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information