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