| Safe Haskell | Safe-Inferred |
|---|---|
| Language | Haskell2010 |
Data.Thyme.Calendar
Description
Synopsis
- newtype Day = ModifiedJulianDay {}
- modifiedJulianDay :: Iso' Day Int
- type Year = Int
- type Month = Int
- type DayOfMonth = Int
- data YearMonthDay = YearMonthDay {}
- _ymdYear :: Lens' YearMonthDay Year
- _ymdMonth :: Lens' YearMonthDay Month
- _ymdDay :: Lens' YearMonthDay DayOfMonth
- type Years = Int
- type Months = Int
- type Days = Int
- isLeapYear :: Year -> Bool
- yearMonthDay :: Iso' OrdinalDate YearMonthDay
- gregorian :: Iso' Day YearMonthDay
- gregorianValid :: YearMonthDay -> Maybe Day
- showGregorian :: Day -> String
- gregorianMonthLength :: Year -> Month -> Days
- gregorianMonthsClip :: Months -> YearMonthDay -> YearMonthDay
- gregorianMonthsRollover :: Months -> YearMonthDay -> YearMonthDay
- gregorianYearsClip :: Years -> YearMonthDay -> YearMonthDay
- gregorianYearsRollover :: Years -> YearMonthDay -> YearMonthDay
- addDays :: Days -> Day -> Day
- diffDays :: Day -> Day -> Days
- toGregorian :: Day -> (Year, Month, DayOfMonth)
- fromGregorian :: Year -> Month -> DayOfMonth -> Day
- fromGregorianValid :: Year -> Month -> DayOfMonth -> Maybe Day
- addGregorianMonthsClip :: Months -> Day -> Day
- addGregorianMonthsRollover :: Months -> Day -> Day
- addGregorianYearsClip :: Years -> Day -> Day
- addGregorianYearsRollover :: Years -> Day -> Day
Day
A calendar-agnostic day, internally represented as a count of days since 1858-11-17, the Modified Julian Day (MJD) epoch.
To convert a Day to the corresponding YearMonthDay in the Gregorian
calendar, see gregorian.
>gregorian#YearMonthDay2016 3 1 2016-03-01
Day is an instance of AffineSpace where , so
arithmetic on Diff Day = DaysDay and Days can be performed with the .-., .+^,
and .-^ operators.
>gregorian#YearMonthDay2016 3 1.-.gregorian#YearMonthDay2016 2 1 29
>gregorian#YearMonthDay2016 3 1.-^1 2016-02-29
Other ways of viewing a Day include ordinalDate, and weekDate.
Constructors
| ModifiedJulianDay | |
Fields | |
Instances
modifiedJulianDay :: Iso' Day Int Source #
Convert between a Day and the corresponding count of days from
1858-11-17, the MJD epoch.
modifiedJulianDay=isotoModifiedJulianDayModifiedJulianDay
>modifiedJulianDay#0 1858-11-17 >gregorian#YearMonthDay2016 3 1&modifiedJulianDay%~subtract1 2016-02-29
Calendar
type DayOfMonth = Int Source #
Calendar day-of-month, starting from 1.
data YearMonthDay Source #
Constructors
| YearMonthDay | |
Instances
_ymdYear :: Lens' YearMonthDay Year Source #
_ymdMonth :: Lens' YearMonthDay Month Source #
_ymdDay :: Lens' YearMonthDay DayOfMonth Source #
Gregorian calendar
Note that using the Gregorian calendar for dates before its adoption (from 1582 onwards, but varies from one country to the next) produces a proleptic calendar, which may cause some confusion.
yearMonthDay :: Iso' OrdinalDate YearMonthDay Source #
Conversion between a Gregorian OrdinalDate and the corresponding
YearMonthDay.
>OrdinalDate2016 32^.yearMonthDayYearMonthDay{ymdYear = 2016, ymdMonth = 2, ymdDay = 1}
>yearMonthDay#YearMonthDay2016 2 1OrdinalDate{odYear = 2016, odDay = 32}
gregorian :: Iso' Day YearMonthDay Source #
Conversion between a Day and its YearMonthDay.
gregorian=ordinalDate.yearMonthDay
>ModifiedJulianDay0^.gregorianYearMonthDay{ymdYear = 1858, ymdMonth = 11, ymdDay = 17}
>gregorian#YearMonthDay1858 11 17 1858-11-17
gregorianValid :: YearMonthDay -> Maybe Day Source #
Conversion between a YearMonthDay and the corresponding Day.
Returns Nothing for invalid input.
>gregorianValid(YearMonthDay2015 2 28)Just2015-02-28
>gregorianValid(YearMonthDay2015 2 29)Nothing
showGregorian :: Day -> String Source #
Shows a Day in
ISO 8601
YYYY-MM-DD format.
See Data.Thyme.Format for other possibilities.
gregorianMonthLength :: Year -> Month -> Days Source #
The number of days in a given month in the Gregorian calendar.
> gregorianMonthLength 2005 2
28
gregorianMonthsClip :: Months -> YearMonthDay -> YearMonthDay Source #
Add months, with days past the last day of the month clipped to the last day.
See also addGregorianMonthsClip.
>gregorianMonthsClip1$YearMonthDay2005 1 30YearMonthDay{ymdYear= 2005,ymdMonth= 2,ymdDay= 28}
gregorianMonthsRollover :: Months -> YearMonthDay -> YearMonthDay Source #
Add months, with days past the last day of the month rolling over to the next month.
See also addGregorianMonthsRollover.
>gregorianMonthsRollover1 $YearMonthDay2005 1 30YearMonthDay{ymdYear= 2005,ymdMonth= 3,ymdDay= 2}
gregorianYearsClip :: Years -> YearMonthDay -> YearMonthDay Source #
Add years, matching month and day, with February 29th clipped to the 28th if necessary.
See also addGregorianYearsClip.
>gregorianYearsClip2 $YearMonthDay2004 2 29YearMonthDay{ymdYear= 2006,ymdMonth= 2,ymdDay= 28}
gregorianYearsRollover :: Years -> YearMonthDay -> YearMonthDay Source #
Add years, matching month and day, with February 29th rolled over to March 1st if necessary.
See also addGregorianYearsRollover.
>gregorianYearsRollover2 $YearMonthDay2004 2 29YearMonthDay{ymdYear= 2006,ymdMonth= 3,ymdDay= 1}
toGregorian :: Day -> (Year, Month, DayOfMonth) Source #
Convert a Day to its Gregorian Year, Month, and DayOfMonth.
toGregorian(viewgregorian->YearMonthDayy m d) = (y, m, d)
fromGregorian :: Year -> Month -> DayOfMonth -> Day Source #
Construct a Day from a Gregorian calendar date.
Does not validate the input.
fromGregoriany m d =gregorian#YearMonthDayy m d
fromGregorianValid :: Year -> Month -> DayOfMonth -> Maybe Day Source #
Construct a Day from a Gregorian calendar date.
Returns Nothing for invalid input.
fromGregorianValidy m d =gregorianValid(YearMonthDayy m d)
addGregorianMonthsClip :: Months -> Day -> Day Source #
Add some number of Months to the given Day; if the original
DayOfMonth exceeds that of the new Month, it will be clipped to the
last day of the new Month.
addGregorianMonthsClipn =gregorian%~gregorianMonthsClipn
addGregorianMonthsRollover :: Months -> Day -> Day Source #
Add some number of Months to the given Day; if the original
DayOfMonth exceeds that of the new Month, it will be rolled over into
the following Month.
addGregorianMonthsRollovern =gregorian%~gregorianMonthsRollovern
addGregorianYearsClip :: Years -> Day -> Day Source #
Add some number of Years to the given Day, with February 29th
clipped to February 28th if necessary.
addGregorianYearsClipn =gregorian%~gregorianYearsClipn
addGregorianYearsRollover :: Years -> Day -> Day Source #
Add some number of Years to the given Day, with February 29th
rolled over to March 1st if necessary.
addGregorianYearsRollovern =gregorian%~gregorianYearsRollovern
Orphan instances
| Arbitrary Day Source # | |
| Arbitrary YearMonthDay Source # | |
| CoArbitrary YearMonthDay Source # | |
Methods coarbitrary :: YearMonthDay -> Gen b -> Gen b # | |
| Bounded Day Source # | |
| Bounded YearMonthDay Source # | |
| Random Day Source # | |
| Random YearMonthDay Source # | |
Methods randomR :: RandomGen g => (YearMonthDay, YearMonthDay) -> g -> (YearMonthDay, g) # random :: RandomGen g => g -> (YearMonthDay, g) # randomRs :: RandomGen g => (YearMonthDay, YearMonthDay) -> g -> [YearMonthDay] # randoms :: RandomGen g => g -> [YearMonthDay] # | |