From 7494dfbace28cfdfc055c9e44728f1e64cea28a2 Mon Sep 17 00:00:00 2001 From: simonmar Date: Wed, 25 Apr 2001 14:36:48 +0000 Subject: [PATCH] [project @ 2001-04-25 14:36:48 by simonmar] fix another sign problem in toClockTime. --- ghc/lib/std/Time.hsc | 29 ++++++++++------------------- 1 file changed, 10 insertions(+), 19 deletions(-) diff --git a/ghc/lib/std/Time.hsc b/ghc/lib/std/Time.hsc index d96db3e..c1f12d1 100644 --- a/ghc/lib/std/Time.hsc +++ b/ghc/lib/std/Time.hsc @@ -3,7 +3,7 @@ -- to compile on sparc-solaris. Blargh. -- ----------------------------------------------------------------------------- --- $Id: Time.hsc,v 1.11 2001/04/07 14:58:44 lewie Exp $ +-- $Id: Time.hsc,v 1.12 2001/04/25 14:36:48 simonmar Exp $ -- -- (c) The University of Glasgow, 1995-2001 -- @@ -69,6 +69,9 @@ module Time , Day(..) , ClockTime(..) -- non-standard, lib. report gives this as abstract + -- instance Eq, Ord + -- instance Show (non-standard) + , getClockTime , TimeDiff(..) @@ -157,24 +160,13 @@ data ClockTime = TOD Integer -- Seconds since 00:00:00 on 1 Jan 1970 Integer -- Picoseconds with the specified second deriving (Eq, Ord) --- When a @ClockTime@ is shown, it is converted to a string of the form --- @"Mon Nov 28 21:45:41 GMT 1994"@. - --- For now, we are restricted to roughly: --- Fri Dec 13 20:45:52 1901 through Tue Jan 19 03:14:07 2038, because --- we use the C library routines based on 32 bit integers. +-- When a ClockTime is shown, it is converted to a CalendarTime in the current +-- timezone and then printed. FIXME: This is arguably wrong, since we can't +-- get the current timezone without being in the IO monad. instance Show ClockTime where - showsPrec _ (TOD secs _nsec) = - showString $ unsafePerformIO $ do - withObject (fromIntegral secs :: CTime) $ \ p_timer -> do - p_tm <- localtime p_timer -- can't fail, according to POSIX - allocaBytes 64 $ \ p_buf -> do -- big enough for error message - r <- strftime p_buf 50 "%a %b %d %H:%M:%S %Z %Y"## p_tm - if r == 0 - then return "ClockTime.show{Time}: internal error" - else peekCString p_buf - + showsPrec _ t = showString (calendarTimeToString + (unsafePerformIO (toCalendarTime t))) showList = showList__ (showsPrec 0) {- @@ -486,7 +478,7 @@ toClockTime (CalendarTime year mon mday hour min sec psec -- result. -- gmtoff <- gmtoff p_tm - let res = fromIntegral t + tz - fromIntegral gmtoff + let res = fromIntegral t - tz + fromIntegral gmtoff return (TOD (fromIntegral res) 0) -- ----------------------------------------------------------------------------- @@ -630,7 +622,6 @@ type CTm = () -- struct tm foreign import unsafe localtime :: Ptr CTime -> IO (Ptr CTm) foreign import unsafe gmtime :: Ptr CTime -> IO (Ptr CTm) -foreign import unsafe strftime :: Ptr CChar -> CSize -> Addr## -> Ptr CTm -> IO CSize foreign import unsafe mktime :: Ptr CTm -> IO CTime foreign import unsafe time :: Ptr CTime -> IO CTime -- 1.7.10.4