hodatime
Copyright(C) 2017 Jason Johnson
LicenseBSD-style (see the file LICENSE)
MaintainerJason Johnson <jason.johnson.081@gmail.com>
Stabilityexperimental
PortabilityPOSIX, Windows
Safe HaskellSafe-Inferred
LanguageHaskell2010

Data.HodaTime.CalendarDate

Description

This is the module for CalendarDate. A CalendarDate represents a date within the calendar system that is part of its type. It has no reference to a particular time zone or time of day.

Construction

To construct one of these types, see the Calendar module you wish to construct the date in (typically Data.HodaTime.Calendar.Gregorian)

Synopsis

Documentation

data DayNth Source #

Used by several smart constructors to chose a day relative to the start or end of the month.

type Year = Int Source #

type CalendarDate cal = Date cal Source #

A calendar date in the calendar system cal. This is a public synonym for the per-calendar representation Date: each calendar defines its own data instance Date cal (see IsCalendar), so unrelated calendars (e.g. Gregorian and Hebrew) need share nothing in how a date is stored.

class HasDate d where Source #

Minimal complete definition

day, month, monthl, year, dayOfWeek, next, previous

Associated Types

type DoW d Source #

type MoY d Source #

Methods

day :: Functor f => (DayOfMonth -> f DayOfMonth) -> d -> f d Source #

Lens for the day component of a HasDate. Please note that days are not clamped: if you add e.g. 400 days then the month and year will roll

month :: d -> MoY d Source #

Accessor for the Month component of a HasDate.

monthl :: Functor f => (Int -> f Int) -> d -> f d Source #

Lens for interacting with the month component of a HasDate. Please note that we convert the month to an Int so meaningful math can be done on it. Also please note that the day will be unaffected except in the case of "end of month" days which may clamp. Note that this clamping will only occur as a final step, so that

>>> modify monthl (+ 2) <$> Gregorian.calendarDate 31 January 2000
Just (CalendarDate 31 March 2000)

and not 29th of March as would happen with some libraries.

year :: Functor f => (Year -> f Year) -> d -> f d Source #

Lens for the year component of a HasDate. Please note that the rest of the date is left as is, with two exceptions: Feb 29 will clamp to 28 in a non-leapyear and if the new year is earlier than the earliest supported year it will clamp back to that year

dayOfWeek :: d -> DoW d Source #

Accessor for the Day of the week enum of a HasDate, for example:

>>> dayOfWeek . fromJust $ Gregorian.calendarDate 31 January 2000
Monday

next :: Int -> DoW d -> d -> d Source #

Returns a HasDate shifted to the nth next Day of Week from the current HasDate, for example:

>>> next 1 Monday . fromJust $ Gregorian.calendarDate 31 January 2000
CalendarDate 7 February 2000

previous :: Int -> DoW d -> d -> d Source #

Returns a HasDate shifted to the nth previous Day of Week from the current HasDate, for example:

>>> previous 1 Monday . fromJust $ Gregorian.calendarDate 31 January 2000
CalendarDate 24 January 2000

yearMonthDay :: d -> (Year, MoY d, DayOfMonth) Source #

Access the year, month and day-of-month components together in a single call, returned as a (year, month, day) tuple.

This is purely an access optimization for code that needs more than one date component at once. Reading the components individually with year, month and day is perfectly correct, but for a packed representation (such as the Gregorian Date, which stores a cycle/century/day-in-century triple) each of those accessors independently decodes the stored value, so asking for all three separately decodes it three times. yearMonthDay decodes once and hands back every component, which is noticeably cheaper on hot paths (for example date formatting). For representations that already store the components separately (such as the Julian Date) there is nothing to decode and this is simply the three field reads, so it is never slower than the individual accessors and callers can use it unconditionally.

Instances

Instances details
IsCalendar cal => HasDate (CalendarDateTime cal) Source # 
Instance details

Defined in Data.HodaTime.CalendarDateTime.Internal

Associated Types

type DoW (CalendarDateTime cal) 
Instance details

Defined in Data.HodaTime.CalendarDateTime.Internal

type DoW (CalendarDateTime cal) = DayOfWeek cal
type MoY (CalendarDateTime cal) 
Instance details

Defined in Data.HodaTime.CalendarDateTime.Internal

type MoY (CalendarDateTime cal) = Month cal
IsCalendar cal => HasDate (Date cal) Source # 
Instance details

Defined in Data.HodaTime.CalendarDateTime.Internal

Associated Types

type DoW (Date cal) 
Instance details

Defined in Data.HodaTime.CalendarDateTime.Internal

type DoW (Date cal) = DayOfWeek cal
type MoY (Date cal) 
Instance details

Defined in Data.HodaTime.CalendarDateTime.Internal

type MoY (Date cal) = Month cal

Methods

day :: Functor f => (DayOfMonth -> f DayOfMonth) -> Date cal -> f (Date cal) Source #

month :: Date cal -> MoY (Date cal) Source #

monthl :: Functor f => (Int -> f Int) -> Date cal -> f (Date cal) Source #

year :: Functor f => (Year -> f Year) -> Date cal -> f (Date cal) Source #

dayOfWeek :: Date cal -> DoW (Date cal) Source #

next :: Int -> DoW (Date cal) -> Date cal -> Date cal Source #

previous :: Int -> DoW (Date cal) -> Date cal -> Date cal Source #

yearMonthDay :: Date cal -> (Year, MoY (Date cal), DayOfMonth) Source #