+++ /dev/null
-{-# LANGUAGE
- UnicodeSyntax
- #-}
--- |This module provides functions for ANSI C's asctime() format.
---
--- ANSI C's asctime() format looks like:
---
--- @Wdy Mon [D]D HH:MM:SS YYYY@
---
--- The exact syntax is as follows:
---
--- > date-time ::= wday SP month SP day SP time SP year
--- > wday ::= "Mon" | "Tue" | "Wed" | "Thu"
--- > | "Fri" | "Sat" | "Sun"
--- > month ::= "Jan" | "Feb" | "Mar" | "Apr"
--- > | "May" | "Jun" | "Jul" | "Aug"
--- > | "Sep" | "Oct" | "Nov" | "Dec"
--- > day ::= 2DIGIT | SP 1DIGIT
--- > time ::= 2DIGIT ':' 2DIGIT [':' 2DIGIT]
--- > year ::= 4DIGIT
---
--- As you can see, it has no time zone info. "Data.Time.HTTP" will
--- treat it as UTC.
-module Data.Time.Asctime
- ( -- * Formatting
- toAscii
- , toAsciiBuilder
-
- -- * Parsing
- , fromAscii
- , asctime
- )
- where
-import Data.Ascii (Ascii)
-import qualified Data.Ascii as A
-import qualified Data.Attoparsec.Char8 as P
-import Data.Time
-import Data.Time.Asctime.Internal
-import Prelude.Unicode
-
--- |Convert a 'LocalTime' to ANSI C's @asctime()@ string.
-toAscii ∷ LocalTime → Ascii
-toAscii = A.fromAsciiBuilder ∘ toAsciiBuilder
-
--- |Parse an ANSI C's @asctime()@ string. When the string can't be
--- parsed, it returns @'Left' err@.
-fromAscii ∷ Ascii → Either String LocalTime
-fromAscii = P.parseOnly p ∘ A.toByteString
- where
- p = do zt ← asctime
- P.endOfInput
- return zt