{-# LANGUAGE Safe #-}{-# LANGUAGE TypeSynonymInstances #-}{-# OPTIONS -fno-warn-orphans #-}moduleData.Time.Calendar.Gregorian(-- * Year, month and dayYear ,patternCommonEra ,patternBeforeCommonEra ,MonthOfYear ,patternJanuary ,patternFebruary ,patternMarch ,patternApril ,patternMay ,patternJune ,patternJuly ,patternAugust ,patternSeptember ,patternOctober ,patternNovember ,patternDecember ,DayOfMonth ,-- * Gregorian calendartoGregorian ,fromGregorian ,patternYearMonthDay ,fromGregorianValid ,showGregorian ,gregorianMonthLength ,-- calendrical arithmetic-- e.g. "one month after March 31st"addGregorianMonthsClip ,addGregorianMonthsRollOver ,addGregorianYearsClip ,addGregorianYearsRollOver ,addGregorianDurationClip ,addGregorianDurationRollOver ,diffGregorianDurationClip ,diffGregorianDurationRollOver ,-- re-exported from OrdinalDateisLeapYear ,)whereimportData.Time.Calendar.CalendarDiffDays importData.Time.Calendar.Days importData.Time.Calendar.MonthDay importData.Time.Calendar.OrdinalDate importData.Time.Calendar.Private importData.Time.Calendar.Types -- | Convert to proleptic Gregorian calendar.toGregorian ::Day ->(Year ,MonthOfYear ,DayOfMonth )toGregorian :: Day -> (Year, MonthOfYear, MonthOfYear)
toGregorian Day
date =(Year
year ,MonthOfYear
month ,MonthOfYear
day )where(Year
year ,MonthOfYear
yd )=Day -> (Year, MonthOfYear)
toOrdinalDate Day
date (MonthOfYear
month ,MonthOfYear
day )=Bool -> MonthOfYear -> (MonthOfYear, MonthOfYear)
dayOfYearToMonthAndDay (Year -> Bool
isLeapYear Year
year )MonthOfYear
yd -- | Convert from proleptic Gregorian calendar.-- Invalid values will be clipped to the correct range, month first, then day.fromGregorian ::Year ->MonthOfYear ->DayOfMonth ->Day fromGregorian :: Year -> MonthOfYear -> MonthOfYear -> Day
fromGregorian Year
year MonthOfYear
month MonthOfYear
day =Year -> MonthOfYear -> Day
fromOrdinalDate Year
year (Bool -> MonthOfYear -> MonthOfYear -> MonthOfYear
monthAndDayToDayOfYear (Year -> Bool
isLeapYear Year
year )MonthOfYear
month MonthOfYear
day )-- | Bidirectional abstract constructor for the proleptic Gregorian calendar.-- Invalid values will be clipped to the correct range, month first, then day.patternYearMonthDay ::Year ->MonthOfYear ->DayOfMonth ->Day pattern$bYearMonthDay :: Year -> MonthOfYear -> MonthOfYear -> Day
$mYearMonthDay :: forall r.
Day
-> (Year -> MonthOfYear -> MonthOfYear -> r) -> (Void# -> r) -> r
YearMonthDay y m d <-(toGregorian ->(y ,m ,d ))whereYearMonthDay Year
y MonthOfYear
m MonthOfYear
d =Year -> MonthOfYear -> MonthOfYear -> Day
fromGregorian Year
y MonthOfYear
m MonthOfYear
d {-# COMPLETEYearMonthDay #-}-- | Convert from proleptic Gregorian calendar.-- Invalid values will return NothingfromGregorianValid ::Year ->MonthOfYear ->DayOfMonth ->MaybeDay fromGregorianValid :: Year -> MonthOfYear -> MonthOfYear -> Maybe Day
fromGregorianValid Year
year MonthOfYear
month MonthOfYear
day =doMonthOfYear
doy <-Bool -> MonthOfYear -> MonthOfYear -> Maybe MonthOfYear
monthAndDayToDayOfYearValid (Year -> Bool
isLeapYear Year
year )MonthOfYear
month MonthOfYear
day Year -> MonthOfYear -> Maybe Day
fromOrdinalDateValid Year
year MonthOfYear
doy -- | Show in ISO 8601 format (yyyy-mm-dd)showGregorian ::Day ->StringshowGregorian :: Day -> String
showGregorian Day
date =(Year -> String
forall t. ShowPadded t => t -> String
show4 Year
y )String -> String -> String
forall a. [a] -> [a] -> [a]
++String
"-"String -> String -> String
forall a. [a] -> [a] -> [a]
++(MonthOfYear -> String
forall t. ShowPadded t => t -> String
show2 MonthOfYear
m )String -> String -> String
forall a. [a] -> [a] -> [a]
++String
"-"String -> String -> String
forall a. [a] -> [a] -> [a]
++(MonthOfYear -> String
forall t. ShowPadded t => t -> String
show2 MonthOfYear
d )where(Year
y ,MonthOfYear
m ,MonthOfYear
d )=Day -> (Year, MonthOfYear, MonthOfYear)
toGregorian Day
date -- | The number of days in a given month according to the proleptic Gregorian calendar.gregorianMonthLength ::Year ->MonthOfYear ->DayOfMonth gregorianMonthLength :: Year -> MonthOfYear -> MonthOfYear
gregorianMonthLength Year
year =Bool -> MonthOfYear -> MonthOfYear
monthLength (Year -> Bool
isLeapYear Year
year )rolloverMonths ::(Year ,Integer)->(Year ,MonthOfYear )rolloverMonths :: (Year, Year) -> (Year, MonthOfYear)
rolloverMonths (Year
y ,Year
m )=(Year
y Year -> Year -> Year
forall a. Num a => a -> a -> a
+(Year -> Year -> Year
forall a. Integral a => a -> a -> a
div(Year
m Year -> Year -> Year
forall a. Num a => a -> a -> a
-Year
1)Year
12),Year -> MonthOfYear
forall a b. (Integral a, Num b) => a -> b
fromIntegral(Year -> Year -> Year
forall a. Integral a => a -> a -> a
mod(Year
m Year -> Year -> Year
forall a. Num a => a -> a -> a
-Year
1)Year
12)MonthOfYear -> MonthOfYear -> MonthOfYear
forall a. Num a => a -> a -> a
+MonthOfYear
1)addGregorianMonths ::Integer->Day ->(Year ,MonthOfYear ,DayOfMonth )addGregorianMonths :: Year -> Day -> (Year, MonthOfYear, MonthOfYear)
addGregorianMonths Year
n Day
day =(Year
y' ,MonthOfYear
m' ,MonthOfYear
d )where(Year
y ,MonthOfYear
m ,MonthOfYear
d )=Day -> (Year, MonthOfYear, MonthOfYear)
toGregorian Day
day (Year
y' ,MonthOfYear
m' )=(Year, Year) -> (Year, MonthOfYear)
rolloverMonths (Year
y ,MonthOfYear -> Year
forall a b. (Integral a, Num b) => a -> b
fromIntegralMonthOfYear
m Year -> Year -> Year
forall a. Num a => a -> a -> a
+Year
n )-- | Add months, with days past the last day of the month clipped to the last day.-- For instance, 2005年01月30日 + 1 month = 2005年02月28日.addGregorianMonthsClip ::Integer->Day ->Day addGregorianMonthsClip :: Year -> Day -> Day
addGregorianMonthsClip Year
n Day
day =Year -> MonthOfYear -> MonthOfYear -> Day
fromGregorian Year
y MonthOfYear
m MonthOfYear
d where(Year
y ,MonthOfYear
m ,MonthOfYear
d )=Year -> Day -> (Year, MonthOfYear, MonthOfYear)
addGregorianMonths Year
n Day
day -- | Add months, with days past the last day of the month rolling over to the next month.-- For instance, 2005年01月30日 + 1 month = 2005年03月02日.addGregorianMonthsRollOver ::Integer->Day ->Day addGregorianMonthsRollOver :: Year -> Day -> Day
addGregorianMonthsRollOver Year
n Day
day =Year -> Day -> Day
addDays (MonthOfYear -> Year
forall a b. (Integral a, Num b) => a -> b
fromIntegralMonthOfYear
d Year -> Year -> Year
forall a. Num a => a -> a -> a
-Year
1)(Year -> MonthOfYear -> MonthOfYear -> Day
fromGregorian Year
y MonthOfYear
m MonthOfYear
1)where(Year
y ,MonthOfYear
m ,MonthOfYear
d )=Year -> Day -> (Year, MonthOfYear, MonthOfYear)
addGregorianMonths Year
n Day
day -- | Add years, matching month and day, with Feb 29th clipped to Feb 28th if necessary.-- For instance, 2004年02月29日 + 2 years = 2006年02月28日.addGregorianYearsClip ::Integer->Day ->Day addGregorianYearsClip :: Year -> Day -> Day
addGregorianYearsClip Year
n =Year -> Day -> Day
addGregorianMonthsClip (Year
n Year -> Year -> Year
forall a. Num a => a -> a -> a
*Year
12)-- | Add years, matching month and day, with Feb 29th rolled over to Mar 1st if necessary.-- For instance, 2004年02月29日 + 2 years = 2006年03月01日.addGregorianYearsRollOver ::Integer->Day ->Day addGregorianYearsRollOver :: Year -> Day -> Day
addGregorianYearsRollOver Year
n =Year -> Day -> Day
addGregorianMonthsRollOver (Year
n Year -> Year -> Year
forall a. Num a => a -> a -> a
*Year
12)-- | Add months (clipped to last day), then add daysaddGregorianDurationClip ::CalendarDiffDays ->Day ->Day addGregorianDurationClip :: CalendarDiffDays -> Day -> Day
addGregorianDurationClip (CalendarDiffDays Year
m Year
d )Day
day =Year -> Day -> Day
addDays Year
d (Day -> Day) -> Day -> Day
forall a b. (a -> b) -> a -> b
$Year -> Day -> Day
addGregorianMonthsClip Year
m Day
day -- | Add months (rolling over to next month), then add daysaddGregorianDurationRollOver ::CalendarDiffDays ->Day ->Day addGregorianDurationRollOver :: CalendarDiffDays -> Day -> Day
addGregorianDurationRollOver (CalendarDiffDays Year
m Year
d )Day
day =Year -> Day -> Day
addDays Year
d (Day -> Day) -> Day -> Day
forall a b. (a -> b) -> a -> b
$Year -> Day -> Day
addGregorianMonthsRollOver Year
m Day
day -- | Calendrical difference, with as many whole months as possiblediffGregorianDurationClip ::Day ->Day ->CalendarDiffDays diffGregorianDurationClip :: Day -> Day -> CalendarDiffDays
diffGregorianDurationClip Day
day2 Day
day1 =let(Year
y1 ,MonthOfYear
m1 ,MonthOfYear
d1 )=Day -> (Year, MonthOfYear, MonthOfYear)
toGregorian Day
day1 (Year
y2 ,MonthOfYear
m2 ,MonthOfYear
d2 )=Day -> (Year, MonthOfYear, MonthOfYear)
toGregorian Day
day2 ym1 :: Year
ym1 =Year
y1 Year -> Year -> Year
forall a. Num a => a -> a -> a
*Year
12Year -> Year -> Year
forall a. Num a => a -> a -> a
+MonthOfYear -> Year
forall a. Integral a => a -> Year
toIntegerMonthOfYear
m1 ym2 :: Year
ym2 =Year
y2 Year -> Year -> Year
forall a. Num a => a -> a -> a
*Year
12Year -> Year -> Year
forall a. Num a => a -> a -> a
+MonthOfYear -> Year
forall a. Integral a => a -> Year
toIntegerMonthOfYear
m2 ymdiff :: Year
ymdiff =Year
ym2 Year -> Year -> Year
forall a. Num a => a -> a -> a
-Year
ym1 ymAllowed :: Year
ymAllowed =ifDay
day2 Day -> Day -> Bool
forall a. Ord a => a -> a -> Bool
>=Day
day1 thenifMonthOfYear
d2 MonthOfYear -> MonthOfYear -> Bool
forall a. Ord a => a -> a -> Bool
>=MonthOfYear
d1 thenYear
ymdiff elseYear
ymdiff Year -> Year -> Year
forall a. Num a => a -> a -> a
-Year
1elseifMonthOfYear
d2 MonthOfYear -> MonthOfYear -> Bool
forall a. Ord a => a -> a -> Bool
<=MonthOfYear
d1 thenYear
ymdiff elseYear
ymdiff Year -> Year -> Year
forall a. Num a => a -> a -> a
+Year
1dayAllowed :: Day
dayAllowed =CalendarDiffDays -> Day -> Day
addGregorianDurationClip (Year -> Year -> CalendarDiffDays
CalendarDiffDays Year
ymAllowed Year
0)Day
day1 inYear -> Year -> CalendarDiffDays
CalendarDiffDays Year
ymAllowed (Year -> CalendarDiffDays) -> Year -> CalendarDiffDays
forall a b. (a -> b) -> a -> b
$Day -> Day -> Year
diffDays Day
day2 Day
dayAllowed -- | Calendrical difference, with as many whole months as possible.-- Same as 'diffGregorianDurationClip' for positive durations.diffGregorianDurationRollOver ::Day ->Day ->CalendarDiffDays diffGregorianDurationRollOver :: Day -> Day -> CalendarDiffDays
diffGregorianDurationRollOver Day
day2 Day
day1 =let(Year
y1 ,MonthOfYear
m1 ,MonthOfYear
d1 )=Day -> (Year, MonthOfYear, MonthOfYear)
toGregorian Day
day1 (Year
y2 ,MonthOfYear
m2 ,MonthOfYear
d2 )=Day -> (Year, MonthOfYear, MonthOfYear)
toGregorian Day
day2 ym1 :: Year
ym1 =Year
y1 Year -> Year -> Year
forall a. Num a => a -> a -> a
*Year
12Year -> Year -> Year
forall a. Num a => a -> a -> a
+MonthOfYear -> Year
forall a. Integral a => a -> Year
toIntegerMonthOfYear
m1 ym2 :: Year
ym2 =Year
y2 Year -> Year -> Year
forall a. Num a => a -> a -> a
*Year
12Year -> Year -> Year
forall a. Num a => a -> a -> a
+MonthOfYear -> Year
forall a. Integral a => a -> Year
toIntegerMonthOfYear
m2 ymdiff :: Year
ymdiff =Year
ym2 Year -> Year -> Year
forall a. Num a => a -> a -> a
-Year
ym1 ymAllowed :: Year
ymAllowed =ifDay
day2 Day -> Day -> Bool
forall a. Ord a => a -> a -> Bool
>=Day
day1 thenifMonthOfYear
d2 MonthOfYear -> MonthOfYear -> Bool
forall a. Ord a => a -> a -> Bool
>=MonthOfYear
d1 thenYear
ymdiff elseYear
ymdiff Year -> Year -> Year
forall a. Num a => a -> a -> a
-Year
1elseifMonthOfYear
d2 MonthOfYear -> MonthOfYear -> Bool
forall a. Ord a => a -> a -> Bool
<=MonthOfYear
d1 thenYear
ymdiff elseYear
ymdiff Year -> Year -> Year
forall a. Num a => a -> a -> a
+Year
1dayAllowed :: Day
dayAllowed =CalendarDiffDays -> Day -> Day
addGregorianDurationRollOver (Year -> Year -> CalendarDiffDays
CalendarDiffDays Year
ymAllowed Year
0)Day
day1 inYear -> Year -> CalendarDiffDays
CalendarDiffDays Year
ymAllowed (Year -> CalendarDiffDays) -> Year -> CalendarDiffDays
forall a b. (a -> b) -> a -> b
$Day -> Day -> Year
diffDays Day
day2 Day
dayAllowed -- orphan instanceinstanceShowDay whereshow :: Day -> String
show=Day -> String
showGregorian -- orphan instanceinstanceDayPeriod Year whereperiodFirstDay :: Year -> Day
periodFirstDay Year
y =Year -> MonthOfYear -> MonthOfYear -> Day
YearMonthDay Year
y MonthOfYear
January MonthOfYear
1periodLastDay :: Year -> Day
periodLastDay Year
y =Year -> MonthOfYear -> MonthOfYear -> Day
YearMonthDay Year
y MonthOfYear
December MonthOfYear
31dayPeriod :: Day -> Year
dayPeriod (YearMonthDay Year
y MonthOfYear
_MonthOfYear
_)=Year
y 

AltStyle によって変換されたページ (->オリジナル) /