60 * toInteger min +
3600 * toInteger hour +
24 * 3600 * toInteger day
- cal = toUTCTime (TOD (c_sec + sec_diff) (c_psec + psec))
- -- FIXME! ^^^^
+ (d_sec, d_psec) = (c_psec + psec) `quotRem` 1000000000000
+ cal = toUTCTime (TOD (c_sec + sec_diff + d_sec) d_psec)
new_mon = fromEnum (ctMonth cal) + r_mon
month' = fst tmp
yr_diff = snd tmp
-- errors
normalizeTimeDiff td =
let
- rest0 = tdSec td
- + 60 * (tdMin td
- + 60 * (tdHour td
- + 24 * (tdDay td
- + 30 * (tdMonth td
- + 365 * tdYear td))))
+ rest0 = toInteger (tdSec td)
+ + 60 * (toInteger (tdMin td)
+ + 60 * (toInteger (tdHour td)
+ + 24 * (toInteger (tdDay td)
+ + 30 * toInteger (tdMonth td)
+ + 365 * toInteger (tdYear td))))
(diffYears, rest1) = rest0 `quotRem` (365 * 24 * 3600)
(diffMonths, rest2) = rest1 `quotRem` (30 * 24 * 3600)
(diffHours, rest4) = rest3 `quotRem` 3600
(diffMins, diffSecs) = rest4 `quotRem` 60
in
- td{ tdYear = diffYears
- , tdMonth = diffMonths
- , tdDay = diffDays
- , tdHour = diffHours
- , tdMin = diffMins
- , tdSec = diffSecs
+ td{ tdYear = fromInteger diffYears
+ , tdMonth = fromInteger diffMonths
+ , tdDay = fromInteger diffDays
+ , tdHour = fromInteger diffHours
+ , tdMin = fromInteger diffMins
+ , tdSec = fromInteger diffSecs
}
#ifndef __HUGS__
# define tzname _tzname
# endif
# ifndef mingw32_HOST_OS
-foreign import ccall unsafe "time.h &tzname" tzname :: Ptr (Ptr CChar)
+foreign import ccall unsafe "time.h &tzname" tzname :: Ptr CString
# else
foreign import ccall unsafe "__hscore_timezone" timezone :: Ptr CLong
-foreign import ccall unsafe "__hscore_tzname" tzname :: Ptr (Ptr CChar)
+foreign import ccall unsafe "__hscore_tzname" tzname :: Ptr CString
# endif
zone x = do
dst <- (#peek struct tm,tm_isdst) x
#if HAVE_GETTIMEOFDAY
type CTimeVal = ()
+type CTimeZone = ()
foreign import ccall unsafe "time.h gettimeofday"
- gettimeofday :: Ptr CTimeVal -> Ptr () -> IO CInt
+ gettimeofday :: Ptr CTimeVal -> Ptr CTimeZone -> IO CInt
#elif HAVE_FTIME
type CTimeB = ()
#ifndef mingw32_HOST_OS