darcs

IsoDate

Synopsis

- getIsoDateTime :: IO String
- readLocalDate :: String -> CalendarTime
- 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 -> 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`

readLocalDate :: String -> CalendarTime

Read/interpret a date string, assuming local timezone if not specified in the string

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 -> 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 |

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)