X-Git-Url: http://git.cielonegro.org/gitweb.cgi?a=blobdiff_plain;f=Data%2FTime%2FRFC733%2FInternal.hs;h=4037918b7ff4409b1d3a5449e45260eb7560bfc1;hb=e7ac083;hp=d6aea4110904dcbc928f2af3f618fcad55f3b9f2;hpb=98132c09a6383d8d8447e0307207b933f7240f5f;p=time-http.git diff --git a/Data/Time/RFC733/Internal.hs b/Data/Time/RFC733/Internal.hs index d6aea41..4037918 100644 --- a/Data/Time/RFC733/Internal.hs +++ b/Data/Time/RFC733/Internal.hs @@ -5,12 +5,18 @@ -- |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 @@ -106,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