From: sof Date: Fri, 26 Jul 2002 02:36:57 +0000 (+0000) Subject: [project @ 2002-07-26 02:36:57 by sof] X-Git-Tag: nhc98-1-18-release~929 X-Git-Url: http://git.megacz.com/?a=commitdiff_plain;h=77cdf95f2d09852cfbc9ca11bbe2a21270ab562f;p=ghc-base.git [project @ 2002-07-26 02:36:57 by sof] gmtoff: according to the (POSIX / Single Unix and MSVC) documentation of tzset(), 'timezone' is > 0 west of the Prime Meridian, so extend prev. commit to apply to all platforms, not just Win32. --- diff --git a/System/Time.hsc b/System/Time.hsc index 3df3091..bc6bcf9 100644 --- a/System/Time.hsc +++ b/System/Time.hsc @@ -336,8 +336,7 @@ foreign import ccall "&timezone" timezone :: Ptr CTime gmtoff x = do dst <- (#peek struct tm,tm_isdst) x tz <- if dst then peek altzone else peek timezone - return (fromIntegral tz) -# define GMTOFF(x) (((struct tm *)x)->tm_isdst ? altzone : timezone ) + return (-fromIntegral tz) # else /* ! HAVE_ALTZONE */ #if !defined(mingw32_TARGET_OS) @@ -348,13 +347,13 @@ foreign import ccall unsafe "timezone" timezone :: Ptr CLong gmtoff x = do dst <- (#peek struct tm,tm_isdst) x tz <- peek timezone -#if defined(mingw32_TARGET_OS) - -- According to the MSVC documentation for _tzset, _timezone is > 0 - -- for locations west of the Prime Meridian. Code elsewhere in this - -- module assume that >0 gmt offsets means east, so flip the sign. - tz <- return (-tz) -#endif - if dst then return (fromIntegral tz - 3600) else return tz + -- According to the documentation for tzset(), + -- http://www.opengroup.org/onlinepubs/007908799/xsh/tzset.html + -- timezone offsets are > 0 west of the Prime Meridian. + -- + -- This module assumes the interpretation of tm_gmtoff, i.e., offsets + -- are > 0 East of the Prime Meridian, so flip the sign. + return (- (if dst then (fromIntegral tz - 3600) else tz)) # endif /* ! HAVE_ALTZONE */ #endif /* ! HAVE_TM_ZONE */