1 {-# LANGUAGE FlexibleContexts #-}
2 module Data.Time.RFC1123.Parsec
10 import Data.Time.Calendar.WeekDate
11 import Data.Time.HTTP.Common
12 import Data.Time.RFC822.Parsec
15 -- |This is a parsec parser for RFC 1123 date and time strings.
16 rfc1123DateAndTime :: Stream s m Char => ParsecT s u m ZonedTime
17 rfc1123DateAndTime = dateTime
19 dateTime :: Stream s m Char => ParsecT s u m ZonedTime
20 dateTime = do weekDay <- optionMaybe $
21 do w <- shortWeekDayNameP
27 -> return () -- No day in week exists.
29 -> assertWeekDayIsGood givenWD gregDay
30 (tod, timeZone) <- rfc822time
31 let lt = LocalTime gregDay tod
32 zt = ZonedTime lt timeZone
35 date :: Stream s m Char => ParsecT s u m Day
36 date = do day <- read2
38 month <- shortMonthNameP
42 assertGregorianDateIsGood year month day