haddock comments
authorPHO <pho@cielonegro.org>
Thu, 18 Mar 2010 04:54:35 +0000 (13:54 +0900)
committerPHO <pho@cielonegro.org>
Thu, 18 Mar 2010 04:54:35 +0000 (13:54 +0900)
Data/Time/Asctime.hs
Data/Time/HTTP.hs
Data/Time/HTTP/Parsec.hs
time-http.cabal

index 0da530571a329787d82c91136f668b457f51febf..fd5cca01f994d8dde7f733e89344c1ccad69a201 100644 (file)
@@ -6,7 +6,7 @@
 --
 -- The exact syntax is as follows:
 --
--- > date-time ::= wday ' ' month ' ' day ' ' time ' ' year
+-- > date-time ::= wday SP month SP day SP time SP year
 -- > wday      ::= "Mon" | "Tue" | "Wed" | "Thu"
 -- >             | "Fri" | "Sat" | "Sun"
 -- > month     ::= "Jan" | "Feb" | "Mar" | "Apr"
index 3a3dc3e833aeeeb82b16cf11c22f19d0999ff2eb..9f628063938c744d232aa1751303e3e7b6b23817 100644 (file)
@@ -1,3 +1,41 @@
+-- |This module provides functions to parse and format HTTP\/1.1 date
+-- and time formats.
+--
+-- The HTTP\/1.1 specification (RFC 2616) says that HTTP\/1.1 clients
+-- and servers which parse the date value MUST accept all the
+-- following formats, though they MUST only generate the RFC 1123
+-- format for representing HTTP-date values in header fields:
+--
+-- > Sun, 06 Nov 1994 08:49:37 GMT  ; RFC 822, updated by RFC 1123
+-- > Sunday, 06-Nov-94 08:49:37 GMT ; RFC 850, obsoleted by RFC 1036
+-- > Sun Nov  6 08:49:37 1994       ; ANSI C's asctime() format
+--
+-- It also says that all HTTP date\/time stamps MUST be represented in
+-- Greenwich Mean Time (GMT), without exception. For the purposes of
+-- HTTP, GMT is exactly equal to UTC (Coordinated Universal
+-- Time). This is indicated in the first two formats by the inclusion
+-- of @\"GMT\"@ as the three-letter abbreviation for time zone, and
+-- MUST be assumed when reading the asctime format.
+--
+-- > HTTP-date    = rfc1123-date | rfc850-date | asctime-date
+-- > rfc1123-date = wkday "," SP date1 SP time SP "GMT"
+-- > rfc850-date  = weekday "," SP date2 SP time SP "GMT"
+-- > asctime-date = wkday SP date3 SP time SP 4DIGIT
+-- > date1        = 2DIGIT SP month SP 4DIGIT
+-- >                ; day month year (e.g., 02 Jun 1982)
+-- > date2        = 2DIGIT "-" month "-" 2DIGIT
+-- >                ; day-month-year (e.g., 02-Jun-82)
+-- > date3        = month SP ( 2DIGIT | ( SP 1DIGIT ))
+-- >                ; month day (e.g., Jun  2)
+-- > time         = 2DIGIT ":" 2DIGIT ":" 2DIGIT
+-- >                ; 00:00:00 - 23:59:59
+-- > wkday        = "Mon" | "Tue" | "Wed"
+-- >              | "Thu" | "Fri" | "Sat" | "Sun"
+-- > weekday      = "Monday" | "Tuesday" | "Wednesday"
+-- >              | "Thursday" | "Friday" | "Saturday" | "Sunday"
+-- > month        = "Jan" | "Feb" | "Mar" | "Apr"
+-- >              | "May" | "Jun" | "Jul" | "Aug"
+-- >              | "Sep" | "Oct" | "Nov" | "Dec"
 module Data.Time.HTTP
     ( format
     , parse
@@ -10,7 +48,7 @@ import qualified Text.Parsec as P
 import Data.Time
 import Data.Time.HTTP.Parsec
 
-
+-- |Format an 'UTCTime' in RFC 1123 date and time.
 format :: UTCTime -> String
 format utcTime
     = let timeZone  = TimeZone 0 False "GMT"
@@ -18,7 +56,15 @@ format utcTime
       in
         RFC1123.format zonedTime
 
-
+-- |Parse a date and time string in any of RFC 822, RFC 1123, RFC 850
+-- and ANSI C's asctime() formats. When the string can't be parsed, it
+-- returns 'Nothing'.
+--
+-- This function is even more permissive than what HTTP\/1.1
+-- specifies. That is, it accepts 2-digit years in RFC 822, omitted
+-- separator symbols in RFC 850, omitted sec fields, and non-GMT time
+-- zones. I believe this behavior will not cause a problem but you
+-- should know this.
 parse :: String -> Maybe UTCTime
 parse src = case P.parse p "" src of
               Right ut -> Just ut
index 03bd54cb28aab975fc526fccafe8870538eb76ef..117837efdc8ed119e565d21012b1e8592d54f606 100644 (file)
@@ -11,7 +11,8 @@ import Data.Time.RFC733.Parsec
 import Data.Time.Asctime.Parsec
 import Text.Parsec
 
-
+-- |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
index c703beb1eb8f1cd6725b6b9cb41530845328f41f..2550adcb8c0f9b4b3c89a231a54fea1c9965f72b 100644 (file)
@@ -3,7 +3,7 @@ Version:             0.1
 Synopsis:            Parse and format HTTP/1.1 Date and Time string
 Description:
         This package provides functionalities to parse and format
-        various Date and Time formats allowed by HTTP\/1.1 (RFC 2616).
+        various Date and Time formats allowed in HTTP\/1.1 (RFC 2616).
 
 Homepage:            http://cielonegro.org/HTTPDateTime.html
 License:             PublicDomain