@@ -151,13 +151,16 @@ type TimeZoneHMS = (Int,Int,Int)
151151
152152getTimeZoneHMS :: A.Parser TimeZoneHMS
153153getTimeZoneHMS = do
154− !sign <- A.satisfy (\c -> c == '+' || c == '-')
155− !hours <- digits "timezone"
156− !mins <- (A.char ':' *> digits "timezone minutes") <|> pure 0
157− !secs <- (A.char ':' *> digits "timezone seconds") <|> pure 0
158− if sign == '+'
159− then return $! (hours, mins, secs)
160− else return $! (\ !h !m !s -> (h,m,s)) (-hours) (-mins) (-secs)
154+ !sign <- A.satisfy (\c -> c == '+' || c == '-' || c == 'Z')
155+ if sign == 'Z'
156+ then return (0,0,0)
157+ else do
158+ !hours <- digits "timezone"
159+ !mins <- (A.char ':' *> digits "timezone minutes") <|> pure 0
160+ !secs <- (A.char ':' *> digits "timezone seconds") <|> pure 0
161+ if sign == '+'
162+ then return $! (hours, mins, secs)
163+ else return $! (\ !h !m !s -> (h,m,s)) (-hours) (-mins) (-secs)
161164
162165localToUTCTimeOfDayHMS :: TimeZoneHMS -> TimeOfDay -> (Integer, TimeOfDay)
163166localToUTCTimeOfDayHMS (dh, dm, ds) (TimeOfDay h m s) =