Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
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
#
YearMonthDay
2016 3 1 2016-03-01
Day
is an instance of AffineSpace
where
, so
arithmetic on Diff
Day
= Days
Day
and Days
can be performed with the .-.
, .+^
,
and .-^
operators.
>gregorian
#
YearMonthDay
2016 3 1.-.
gregorian
#
YearMonthDay
2016 2 1 29
>gregorian
#
YearMonthDay
2016 3 1.-^
1 2016-02-29
Other ways of viewing a Day
include ordinalDate
, and weekDate
.
Instances
modifiedJulianDay :: Iso' Day Int Source #
Convert between a Day
and the corresponding count of days from
1858-11-17, the MJD epoch.
modifiedJulianDay
=iso
toModifiedJulianDay
ModifiedJulianDay
>modifiedJulianDay
#
0 1858-11-17 >gregorian
#
YearMonthDay
2016 3 1&
modifiedJulianDay
%~
subtract
1 2016-02-29
Calendar
type DayOfMonth = Int Source #
Calendar day-of-month, starting from 1.
data YearMonthDay Source #
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
.
>OrdinalDate
2016 32^.
yearMonthDay
YearMonthDay
{ymdYear = 2016, ymdMonth = 2, ymdDay = 1}
>yearMonthDay
#
YearMonthDay
2016 2 1OrdinalDate
{odYear = 2016, odDay = 32}
gregorian :: Iso' Day YearMonthDay Source #
Conversion between a Day
and its YearMonthDay
.
gregorian
=ordinalDate
.yearMonthDay
>ModifiedJulianDay
0^.
gregorian
YearMonthDay
{ymdYear = 1858, ymdMonth = 11, ymdDay = 17}
>gregorian
#
YearMonthDay
1858 11 17 1858-11-17
gregorianValid :: YearMonthDay -> Maybe Day Source #
Conversion between a YearMonthDay
and the corresponding Day
.
Returns Nothing
for invalid input.
>gregorianValid
(YearMonthDay
2015 2 28)Just
2015-02-28
>gregorianValid
(YearMonthDay
2015 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
.
>gregorianMonthsClip
1$
YearMonthDay
2005 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
.
>gregorianMonthsRollover
1 $YearMonthDay
2005 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
.
>gregorianYearsClip
2 $YearMonthDay
2004 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
.
>gregorianYearsRollover
2 $YearMonthDay
2004 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
(view
gregorian
->YearMonthDay
y m d) = (y, m, d)
fromGregorian :: Year -> Month -> DayOfMonth -> Day Source #
Construct a Day
from a Gregorian calendar date.
Does not validate the input.
fromGregorian
y m d =gregorian
#
YearMonthDay
y m d
fromGregorianValid :: Year -> Month -> DayOfMonth -> Maybe Day Source #
Construct a Day
from a Gregorian calendar date.
Returns Nothing
for invalid input.
fromGregorianValid
y m d =gregorianValid
(YearMonthDay
y 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
.
addGregorianMonthsClip
n =gregorian
%~
gregorianMonthsClip
n
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
.
addGregorianMonthsRollover
n =gregorian
%~
gregorianMonthsRollover
n
addGregorianYearsClip :: Years -> Day -> Day Source #
Add some number of Years
to the given Day
, with February 29th
clipped to February 28th if necessary.
addGregorianYearsClip
n =gregorian
%~
gregorianYearsClip
n
addGregorianYearsRollover :: Years -> Day -> Day Source #
Add some number of Years
to the given Day
, with February 29th
rolled over to March 1st if necessary.
addGregorianYearsRollover
n =gregorian
%~
gregorianYearsRollover
n
Orphan instances
Arbitrary Day Source # | |
Arbitrary YearMonthDay Source # | |
arbitrary :: Gen YearMonthDay # shrink :: YearMonthDay -> [YearMonthDay] # | |
CoArbitrary YearMonthDay Source # | |
coarbitrary :: YearMonthDay -> Gen b -> Gen b # | |
Bounded Day Source # | |
Bounded YearMonthDay Source # | |
Random Day Source # | |
Random YearMonthDay Source # | |
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] # |