X-Git-Url: http://git.cielonegro.org/gitweb.cgi?p=time-http.git;a=blobdiff_plain;f=Data%2FTime%2FHTTP%2FInternal.hs;h=e94567076420449fb0c22e27b7fd8bb4f5aef3ad;hp=06a0ad2c532f6068a4dd30b1ba79d1af3dba87aa;hb=98132c09a6383d8d8447e0307207b933f7240f5f;hpb=24bf3b8db05616dec2aa4e6d7445d985935005c4 diff --git a/Data/Time/HTTP/Internal.hs b/Data/Time/HTTP/Internal.hs index 06a0ad2..e945670 100644 --- a/Data/Time/HTTP/Internal.hs +++ b/Data/Time/HTTP/Internal.hs @@ -1,19 +1,36 @@ -{-# LANGUAGE FlexibleContexts #-} +{-# LANGUAGE + UnicodeSyntax + #-} +-- |Internal functions for "Data.Time.HTTP". module Data.Time.HTTP.Internal - ( rfc2616DateAndTime + ( httpDateAndTime + , toAsciiBuilder ) where -import Control.Monad +import Control.Applicative +import Data.Ascii (AsciiBuilder) +import Data.Attoparsec.Char8 import Data.Time -import Data.Time.RFC1123.Internal -import Data.Time.RFC733.Internal -import Data.Time.Asctime.Internal +import qualified Data.Time.RFC1123.Internal as RFC1123 +import qualified Data.Time.RFC733.Internal as RFC733 +import qualified Data.Time.Asctime.Internal as Asctime +import Prelude.Unicode --- |This is a parsec parser for date and time formats allowed in --- HTTP\/1.1 (RFC 2616). -rfc2616DateAndTime :: Stream s m Char => ParsecT s u m UTCTime -rfc2616DateAndTime - = choice [ liftM zonedTimeToUTC $ try rfc1123DateAndTime - , liftM zonedTimeToUTC $ try rfc733DateAndTime - , liftM (localTimeToUTC utc) asctime +-- |Parse a date and time string in any formats allowed by HTTP\/1.1 +-- (RFC 2616). +httpDateAndTime ∷ Parser UTCTime +httpDateAndTime + = choice [ zonedTimeToUTC <$> try RFC1123.rfc1123DateAndTime + , zonedTimeToUTC <$> try RFC733.rfc733DateAndTime + , localTimeToUTC utc <$> Asctime.asctime ] + +-- |Convert a 'UTCTime' to RFC 1123 date and time string. +toAsciiBuilder ∷ UTCTime → AsciiBuilder +toAsciiBuilder = RFC1123.toAsciiBuilder ∘ ut2zt + where + ut2zt ∷ UTCTime → ZonedTime + ut2zt = utcToZonedTime gmt + + gmt ∷ TimeZone + gmt = TimeZone 0 False "GMT"