| 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
- fromGregorian :: Year -> Month -> DayOfMonth -> Day
- addDays :: Days -> Day -> Day
- diffDays :: Day -> Day -> Days
- toGregorian :: Day -> (Year, Month, DayOfMonth)
- fromGregorianValid :: Year -> Month -> DayOfMonth -> Maybe Day
- gregorianMonthLength :: Year -> Month -> Days
- addGregorianMonthsClip :: Months -> Day -> Day
- addGregorianYearsClip :: Years -> Day -> Day
- gregorianMonthsClip :: Months -> YearMonthDay -> YearMonthDay
- gregorianMonthsRollover :: Months -> YearMonthDay -> YearMonthDay
- gregorianYearsClip :: Years -> YearMonthDay -> YearMonthDay
- gregorianYearsRollover :: Years -> YearMonthDay -> YearMonthDay
- addGregorianMonthsRollover :: Months -> 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
| Arbitrary Day Source # | |
| CoArbitrary Day Source # | |
Defined in Data.Thyme.Calendar.Internal Methods coarbitrary :: Day -> Gen b -> Gen b # | |
| Data Day Source # | |
Defined in Data.Thyme.Calendar.Internal Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Day -> c Day # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Day # dataTypeOf :: Day -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Day) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Day) # gmapT :: (forall b. Data b => b -> b) -> Day -> Day # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Day -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Day -> r # gmapQ :: (forall d. Data d => d -> u) -> Day -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> Day -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Day -> m Day # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Day -> m Day # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Day -> m Day # | |
| Bounded Day Source # | |
| Enum Day Source # | |
| Generic Day Source # | |
| Ix Day Source # | |
| Read Day Source # | |
| Show Day Source # | |
| NFData Day Source # | |
Defined in Data.Thyme.Calendar.Internal | |
| Eq Day Source # | |
| Ord Day Source # | |
| Hashable Day Source # | |
Defined in Data.Thyme.Calendar.Internal | |
| Random Day Source # | |
| FormatTime Day Source # | |
Defined in Data.Thyme.Format | |
| ParseTime Day Source # | |
| Unbox Day Source # | |
Defined in Data.Thyme.Calendar.Internal | |
| AffineSpace Day Source # | |
| Thyme Day Day Source # | |
| Vector Vector Day Source # | |
Defined in Data.Thyme.Calendar.Internal Methods basicUnsafeFreeze :: Mutable Vector s Day -> ST s (Vector Day) basicUnsafeThaw :: Vector Day -> ST s (Mutable Vector s Day) basicLength :: Vector Day -> Int basicUnsafeSlice :: Int -> Int -> Vector Day -> Vector Day basicUnsafeIndexM :: Vector Day -> Int -> Box Day basicUnsafeCopy :: Mutable Vector s Day -> Vector Day -> ST s () | |
| MVector MVector Day Source # | |
Defined in Data.Thyme.Calendar.Internal Methods basicLength :: MVector s Day -> Int basicUnsafeSlice :: Int -> Int -> MVector s Day -> MVector s Day basicOverlaps :: MVector s Day -> MVector s Day -> Bool basicUnsafeNew :: Int -> ST s (MVector s Day) basicInitialize :: MVector s Day -> ST s () basicUnsafeReplicate :: Int -> Day -> ST s (MVector s Day) basicUnsafeRead :: MVector s Day -> Int -> ST s Day basicUnsafeWrite :: MVector s Day -> Int -> Day -> ST s () basicClear :: MVector s Day -> ST s () basicSet :: MVector s Day -> Day -> ST s () basicUnsafeCopy :: MVector s Day -> MVector s Day -> ST s () basicUnsafeMove :: MVector s Day -> MVector s Day -> ST s () basicUnsafeGrow :: MVector s Day -> Int -> ST s (MVector s Day) | |
| type Rep Day Source # | |
Defined in Data.Thyme.Calendar.Internal | |
| newtype Vector Day Source # | |
Defined in Data.Thyme.Calendar.Internal | |
| type Diff Day Source # | |
Defined in Data.Thyme.Calendar.Internal | |
| newtype MVector s Day Source # | |
Defined in Data.Thyme.Calendar.Internal | |
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.
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
toGregorian :: Day -> (Year, Month, DayOfMonth) Source #
Convert a Day to its Gregorian Year, Month, and DayOfMonth.
toGregorian(viewgregorian->YearMonthDayy m d) = (y, 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)
gregorianMonthLength :: Year -> Month -> Days Source #
The number of days in a given month in the Gregorian calendar.
> gregorianMonthLength 2005 2
28
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
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
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}
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
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] # | |