4 -- |This module provides functions for ANSI C's asctime() format.
6 -- ANSI C's asctime() format looks like:
8 -- @Wdy Mon DD HH:MM:SS YYYY@
10 -- The exact syntax is as follows:
12 -- > date-time ::= wday SP month SP day SP time SP year
13 -- > wday ::= "Mon" | "Tue" | "Wed" | "Thu"
14 -- > | "Fri" | "Sat" | "Sun"
15 -- > month ::= "Jan" | "Feb" | "Mar" | "Apr"
16 -- > | "May" | "Jun" | "Jul" | "Aug"
17 -- > | "Sep" | "Oct" | "Nov" | "Dec"
19 -- > time ::= 2DIGIT ':' 2DIGIT [':' 2DIGIT]
22 -- As you can see, it has no time zone info. "Data.Time.HTTP" will
24 module Data.Time.Asctime
34 import Data.Ascii (Ascii)
35 import qualified Data.Ascii as A
36 import qualified Data.Attoparsec.Char8 as P
38 import Data.Time.Asctime.Internal
39 import Prelude.Unicode
41 -- |Convert a 'LocalTime' to ANSI C's @asctime()@ string.
42 toAscii ∷ LocalTime → Ascii
43 toAscii = A.fromAsciiBuilder ∘ toAsciiBuilder
45 -- |Parse an ANSI C's @asctime()@ string. When the string can't be
46 -- parsed, it returns @'Left' err@.
47 fromAscii ∷ Ascii → Either String LocalTime
48 fromAscii = P.parseOnly p ∘ A.toByteString