]> gitweb @ CieloNegro.org - time-http.git/blob - Data/Time/RFC1123/Internal.hs
Data.Time.RFC{733,822} now compiles.
[time-http.git] / Data / Time / RFC1123 / Internal.hs
1 {-# LANGUAGE FlexibleContexts #-}
2 module Data.Time.RFC1123.Internal
3     ( rfc1123DateAndTime
4     )
5     where
6 import Control.Monad
7 import Data.Attoparsec.Char8
8 import Data.Fixed
9 import Data.Time
10 import Data.Time.Calendar.WeekDate
11 import Data.Time.HTTP.Common
12 import Data.Time.RFC822.Internal
13
14 -- |Parse an RFC 1123 date and time string.
15 rfc1123DateAndTime :: Parser ZonedTime
16 rfc1123DateAndTime = dateTime
17
18 dateTime :: Parser ZonedTime
19 dateTime = do weekDay <- optionMaybe $
20                          do w <- shortWeekDayNameP
21                             _ <- string ", "
22                             return w
23               gregDay <- date
24               case weekDay of
25                 Nothing
26                     -> return () -- No day in week exists.
27                 Just givenWD
28                     -> assertWeekDayIsGood givenWD gregDay
29               (tod, timeZone) <- rfc822time
30               let lt = LocalTime gregDay tod
31                   zt = ZonedTime lt timeZone
32               return zt
33
34 date :: Stream s m Char => ParsecT s u m Day
35 date = do day   <- read2
36           _     <- char ' '
37           month <- shortMonthNameP
38           _     <- char ' '
39           year  <- read4
40           _     <- char ' '
41           assertGregorianDateIsGood year month day