module Data.Time.RFC1123 ( format , parse ) where import qualified Text.Parsec as P import Data.Time import Data.Time.Calendar.WeekDate import Data.Time.HTTP.Common import Data.Time.RFC822 (showRFC822TimeZone) import Data.Time.RFC1123.Parsec {- The syntax for the date is hereby changed to: date = 1*2DIGIT month 2*4DIGIT -} format :: ZonedTime -> String format zonedTime = let localTime = zonedTimeToLocalTime zonedTime timeZone = zonedTimeZone zonedTime (year, month, day) = toGregorian (localDay localTime) (_, _, week) = toWeekDate (localDay localTime) timeOfDay = localTimeOfDay localTime in concat [ shortWeekDayName week , ", " , show2 day , " " , shortMonthName month , " " , show4 year , " " , show2 (todHour timeOfDay) , ":" , show2 (todMin timeOfDay) , ":" , show2 (floor (todSec timeOfDay)) , " " , showRFC822TimeZone timeZone ] parse :: String -> Maybe ZonedTime parse src = case P.parse p "" src of Right zt -> Just zt Left _ -> Nothing where p = do zt <- rfc1123DateAndTime _ <- P.eof return zt