]> gitweb @ CieloNegro.org - time-http.git/blob - Data/Time/RFC1123.hs
Changed some module's name
[time-http.git] / Data / Time / RFC1123.hs
1 -- |This module provides functions to parse and format RFC 1123 date
2 -- and time formats.
3 --
4 -- The format is basically same as RFC 822, but the syntax for @date@
5 -- is changed from:
6 --
7 -- > year ::= 2DIGIT
8 --
9 -- to:
10 --
11 -- > year ::= 4DIGIT
12 module Data.Time.RFC1123
13     ( format
14     , parse
15     )
16     where
17 import Data.Time
18 import Data.Time.Calendar.WeekDate
19 import Data.Time.HTTP.Common
20 import Data.Time.RFC822 (showRFC822TimeZone)
21 import Data.Time.RFC1123.Internal
22
23 -- |Format a 'ZonedTime' in RFC 1123.
24 format :: ZonedTime -> String
25 format zonedTime
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
31       in
32         concat [ shortWeekDayName week
33                , ", "
34                , show2 day
35                , " "
36                , shortMonthName month
37                , " "
38                , show4 year
39                , " "
40                , show2 (todHour timeOfDay)
41                , ":"
42                , show2 (todMin timeOfDay)
43                , ":"
44                , show2 (floor (todSec timeOfDay))
45                , " "
46                , showRFC822TimeZone timeZone
47                ]
48
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
53               Right zt -> Just zt
54               Left  _  -> Nothing
55     where
56       p = do zt <- rfc1123DateAndTime
57              _  <- P.eof
58              return zt