{-# LANGUAGE FlexibleContexts #-} module Data.Time.Asctime.Parsec ( asctime ) where import Control.Monad import Data.Fixed import Data.Time import Data.Time.Calendar.WeekDate import Data.Time.HTTP.Common import Text.Parsec 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)