darcs-2.12.5: a distributed, interactive, smart revision control system

Copyright | 2003 Peter Simons 2003 David Roundy
License | GPL
Maintainer | darcs-devel@darcs.net
Stability | experimental
Portability | portable
Safe Haskell | None
Language | Haskell2010

Darcs.Util.IsoDate

Description

Synopsis

- getIsoDateTime :: IO String
- readUTCDate :: String -> CalendarTime
- parseDate :: Int -> String -> Either ParseError MCalendarTime
- getLocalTz :: IO Int
- englishDateTime :: CalendarTime -> CharParser a CalendarTime
- englishInterval :: CalendarTime -> CharParser a TimeInterval
- englishLast :: CalendarTime -> CharParser a (CalendarTime, CalendarTime)
- iso8601Interval :: Int -> CharParser a (Either TimeDiff (MCalendarTime, MCalendarTime))
- iso8601Duration :: CharParser a TimeDiff
- cleanLocalDate :: String -> IO String
- resetCalendar :: CalendarTime -> CalendarTime
- data MCalendarTime = MCalendarTime {
  - mctYear :: Maybe Int
  - mctMonth :: Maybe Month
  - mctDay :: Maybe Int
  - mctHour :: Maybe Int
  - mctMin :: Maybe Int
  - mctSec :: Maybe Int
  - mctPicosec :: Maybe Integer
  - mctWDay :: Maybe Day
  - mctYDay :: Maybe Int
  - mctTZName :: Maybe String
  - mctTZ :: Maybe Int
  - mctIsDST :: Maybe Bool
  - mctWeek :: Bool
  }
- subtractFromMCal :: TimeDiff -> MCalendarTime -> MCalendarTime
- addToMCal :: TimeDiff -> MCalendarTime -> MCalendarTime
- toMCalendarTime :: CalendarTime -> MCalendarTime
- unsafeToCalendarTime :: MCalendarTime -> CalendarTime
- unsetTime :: CalendarTime -> CalendarTime
- type TimeInterval = (Maybe CalendarTime, Maybe CalendarTime)

# Documentation

getIsoDateTime :: IO String #

The current time in the format returned by `showIsoDateTime`

readUTCDate :: String -> CalendarTime #

Read/interpret a date string, assuming UTC if timezone is not specified in the string (see `readDate`) Warning! This errors out if we fail to interpret the date

parseDate :: Int -> String -> Either ParseError MCalendarTime #

Parse a date string, assuming a default timezone if the date string does not specify one. The date formats understood are those of `showIsoDateTime` and `dateTime`

getLocalTz :: IO Int #

Return the local timezone offset from UTC in seconds

englishDateTime :: CalendarTime -> CharParser a CalendarTime #

In English, either a date followed by a time, or vice-versa, e.g,

- yesterday at noon
- yesterday tea time
- 12:00 yesterday

See `englishDate` and `englishTime` Uses its first argument as "now", i.e. the time relative to which "yesterday", "today" etc are to be interpreted

englishInterval :: CalendarTime -> CharParser a TimeInterval #

English expressions for intervals of time,

- before tea time (i.e. from the beginning of time)
- after 14:00 last month (i.e. till now)
- between last year and last month
- in the last three months (i.e. from then till now)
- 4 months ago (i.e. till now; see `englishAgo`)

englishLast :: CalendarTime -> CharParser a (CalendarTime, CalendarTime) #

Durations in English that begin with the word "last", E.g. "last 4 months" is treated as the duration between 4 months ago and now

iso8601Interval :: Int -> CharParser a (Either TimeDiff (MCalendarTime, MCalendarTime)) #

Intervals in ISO 8601, e.g.,

- 2008-09/2012-08-17T16:30
- 2008-09/P2Y11MT16H30M
- P2Y11MT16H30M/2012-08-17T16:30

See `iso8601Duration`

iso8601Duration :: CharParser a TimeDiff #

Durations in ISO 8601, e.g.,

- P4Y (four years)
- P5M (five months)
- P4Y5M (four years and five months)
- P4YT3H6S (four years, three hours and six seconds)

cleanLocalDate :: String -> IO String #

Convert a date string into ISO 8601 format (yyyymmdd variant) assuming local timezone if not specified in the string Warning! This errors out if we fail to interpret the date

resetCalendar :: CalendarTime -> CalendarTime #

Set a calendar to UTC time any eliminate any inconsistencies within (for example, where the weekday is given as `Thursday`, but this does not match what the numerical date would lead one to expect)

data MCalendarTime #

An `MCalenderTime` is an underspecified `CalendarTime` It is used for parsing dates. For example, if you want to parse the date '4 January', it may be useful to underspecify the year by setting it to `Nothing`. This uses almost the same fields as `CalendarTime`, a notable exception being that we introduce `mctWeek` to indicate if a weekday was specified or not

Constructors

MCalendarTime |
Fields mctYear :: Maybe Int mctMonth :: Maybe Month mctDay :: Maybe Int mctHour :: Maybe Int mctMin :: Maybe Int mctSec :: Maybe Int mctPicosec :: Maybe Integer mctWDay :: Maybe Day mctYDay :: Maybe Int mctTZName :: Maybe String mctTZ :: Maybe Int mctIsDST :: Maybe Bool mctWeek :: Bool

Instances

Show MCalendarTime # |
Methods showsPrec :: Int -> MCalendarTime -> ShowS # show :: MCalendarTime -> String # showList :: [MCalendarTime] -> ShowS #

subtractFromMCal :: TimeDiff -> MCalendarTime -> MCalendarTime #

addToMCal :: TimeDiff -> MCalendarTime -> MCalendarTime #

toMCalendarTime :: CalendarTime -> MCalendarTime #

Trivially convert a `CalendarTime` to a fully specified `MCalendarTime` (note that this sets the `mctWeek` flag to `False`

unsafeToCalendarTime :: MCalendarTime -> CalendarTime #

Returns the first `CalendarTime` that falls within a `MCalendarTime` This is only unsafe in the sense that it plugs in default values for fields that have not been set, e.g. `January` for the month or `0` for the seconds field. Maybe we should rename it something happier. See also `resetCalendar`

unsetTime :: CalendarTime -> CalendarTime #

Zero the time fields of a `CalendarTime`

type TimeInterval = (Maybe CalendarTime, Maybe CalendarTime) #