X-Git-Url: http://git.cielonegro.org/gitweb.cgi?p=time-http.git;a=blobdiff_plain;f=Data%2FTime%2FRFC733%2FInternal.hs;h=4037918b7ff4409b1d3a5449e45260eb7560bfc1;hp=d1de6d864014437577cc95654705161be866d18e;hb=e7ac0839f2d4beb2fe79f903222e04e797a47dd4;hpb=512f9a871149c7dd20d0c1c86cb230fbb7dc43f6 diff --git a/Data/Time/RFC733/Internal.hs b/Data/Time/RFC733/Internal.hs index d1de6d8..4037918 100644 --- a/Data/Time/RFC733/Internal.hs +++ b/Data/Time/RFC733/Internal.hs @@ -2,14 +2,21 @@ OverloadedStrings , UnicodeSyntax #-} +-- |Internal functions for "Data.Time.RFC733". module Data.Time.RFC733.Internal ( rfc733DateAndTime + , toAsciiBuilder ) where +import Data.Ascii (AsciiBuilder) +import qualified Data.Ascii as A import Control.Applicative import Data.Attoparsec.Char8 +import Data.Monoid.Unicode import Data.Time +import Data.Time.Calendar.WeekDate import Data.Time.HTTP.Common +import Data.Time.RFC822.Internal hiding (toAsciiBuilder) -- |Parse RFC 733 date and time strings. rfc733DateAndTime ∷ Parser ZonedTime @@ -105,3 +112,28 @@ zone = choice [ string "GMT" *> return (TimeZone 0 False "GMT") , char 'Z' *> return (TimeZone 0 False "Z") , read4digitsTZ ] + +-- |Convert a 'ZonedTime' to RFC 733 date and time string. +toAsciiBuilder ∷ ZonedTime → AsciiBuilder +toAsciiBuilder zonedTime + = let localTime = zonedTimeToLocalTime zonedTime + timeZone = zonedTimeZone zonedTime + (year, month, day) = toGregorian (localDay localTime) + (_, _, week) = toWeekDate (localDay localTime) + timeOfDay = localTimeOfDay localTime + in + longWeekDayName week + ⊕ A.toAsciiBuilder ", " + ⊕ show2 day + ⊕ A.toAsciiBuilder "-" + ⊕ shortMonthName month + ⊕ A.toAsciiBuilder "-" + ⊕ show4 year + ⊕ A.toAsciiBuilder " " + ⊕ show2 (todHour timeOfDay) + ⊕ A.toAsciiBuilder ":" + ⊕ show2 (todMin timeOfDay) + ⊕ A.toAsciiBuilder ":" + ⊕ show2 (floor (todSec timeOfDay) ∷ Int) + ⊕ A.toAsciiBuilder " " + ⊕ showRFC822TimeZone timeZone