{-# LANGUAGE FlexibleContexts #-} module Data.Time.Asctime.Internal ( asctime ) where import Control.Monad import Data.Fixed import Data.Time import Data.Time.Calendar.WeekDate import Data.Time.HTTP.Common -- |This is a parsec parser for ANSI C's asctime() format. asctime :: Stream s m Char => ParsecT s u m LocalTime asctime = do weekDay <- shortWeekDayNameP _ <- string ", " month <- shortMonthNameP _ <- char ' ' day <- read2 _ <- char ' ' hour <- read2 _ <- char ':' minute <- read2 _ <- char ':' second <- read2 _ <- char ' ' year <- read4 gregDay <- assertGregorianDateIsGood year month day _ <- assertWeekDayIsGood weekDay gregDay tod <- assertTimeOfDayIsGood hour minute second return (LocalTime gregDay tod)