]> gitweb @ CieloNegro.org - time-http.git/blob - Data/Time/RFC1123.hs
RFC1123
[time-http.git] / Data / Time / RFC1123.hs
1 module Data.Time.RFC1123
2     ( format
3     , parse
4     )
5     where
6
7 import qualified Text.Parsec as P
8
9 import Data.Time
10 import Data.Time.Calendar.WeekDate
11 import Data.Time.HTTP.Common
12 import Data.Time.RFC1123.Parsec
13
14 {-
15          The syntax for the date is hereby changed to:
16
17             date = 1*2DIGIT month 2*4DIGIT
18 -}
19
20 format :: ZonedTime -> String
21 format zonedTime
22     = let localTime          = zonedTimeToLocalTime zonedTime
23           timeZone           = zonedTimeZone zonedTime
24           (year, month, day) = toGregorian (localDay localTime)
25           (_, _, week)       = toWeekDate  (localDay localTime)
26           timeOfDay          = localTimeOfDay localTime
27       in
28         concat [ shortWeekDayName week
29                , ", "
30                , show2 day
31                , " "
32                , shortMonthName month
33                , " "
34                , show4 year
35                , " "
36                , show2 (todHour timeOfDay)
37                , ":"
38                , show2 (todMin timeOfDay)
39                , ":"
40                , show2 (floor (todSec timeOfDay))
41                , " "
42                , show4digitsTZ timeZone
43                ]
44
45 parse :: String -> Maybe ZonedTime
46 parse src = case P.parse p "" src of
47               Right zt -> Just zt
48               Left  _  -> Nothing
49     where
50       p = do zt <- rfc1123DateAndTime
51              _  <- P.eof
52              return zt