1 -- |This module provides functions to parse and format RFC 1123 date
4 -- The format is basically same as RFC 822, but the syntax for @date@
12 module Data.Time.RFC1123
18 import Data.Time.Calendar.WeekDate
19 import Data.Time.HTTP.Common
20 import Data.Time.RFC822 (showRFC822TimeZone)
21 import Data.Time.RFC1123.Internal
23 -- |Format a 'ZonedTime' in RFC 1123.
24 format :: ZonedTime -> String
26 = let localTime = zonedTimeToLocalTime zonedTime
27 timeZone = zonedTimeZone zonedTime
28 (year, month, day) = toGregorian (localDay localTime)
29 (_, _, week) = toWeekDate (localDay localTime)
30 timeOfDay = localTimeOfDay localTime
32 concat [ shortWeekDayName week
36 , shortMonthName month
40 , show2 (todHour timeOfDay)
42 , show2 (todMin timeOfDay)
44 , show2 (floor (todSec timeOfDay))
46 , showRFC822TimeZone timeZone
49 -- |Parse an RFC 1123 date and time string. When the string can't be
50 -- parsed, it returns 'Nothing'.
51 parse :: String -> Maybe ZonedTime
52 parse src = case P.parse p "" src of
56 p = do zt <- rfc1123DateAndTime