time-http-0.2: Data/Time/HTTP/Internal.hs
{-# LANGUAGE
UnicodeSyntax
#-}
-- |Internal functions for "Data.Time.HTTP".
module Data.Time.HTTP.Internal
( httpDateAndTime
, toAsciiBuilder
)
where
import Control.Applicative
import Data.Ascii (AsciiBuilder)
import Data.Attoparsec.Char8
import Data.Time
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
-- |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"