{-# LANGUAGE Safe #-}-- | ISO 8601 Ordinal Date formatmoduleData.Time.Calendar.OrdinalDate(Day ,Year ,DayOfYear ,WeekOfYear ,moduleData.Time.Calendar.OrdinalDate )whereimportData.Time.Calendar.Days importData.Time.Calendar.Private importData.Time.Calendar.Types -- | Convert to ISO 8601 Ordinal Date format.toOrdinalDate ::Day ->(Year ,DayOfYear )toOrdinalDate :: Day -> (Year, DayOfYear)
toOrdinalDate (ModifiedJulianDay Year
mjd )=(Year
year ,DayOfYear
yd )wherea :: Year
a =Year
mjd Year -> Year -> Year
forall a. Num a => a -> a -> a
+Year
678575quadcent :: Year
quadcent =Year -> Year -> Year
forall a. Integral a => a -> a -> a
divYear
a Year
146097b :: Year
b =Year -> Year -> Year
forall a. Integral a => a -> a -> a
modYear
a Year
146097cent :: Year
cent =Year -> Year -> Year
forall a. Ord a => a -> a -> a
min(Year -> Year -> Year
forall a. Integral a => a -> a -> a
divYear
b Year
36524)Year
3c :: Year
c =Year
b Year -> Year -> Year
forall a. Num a => a -> a -> a
-(Year
cent Year -> Year -> Year
forall a. Num a => a -> a -> a
*Year
36524)quad :: Year
quad =Year -> Year -> Year
forall a. Integral a => a -> a -> a
divYear
c Year
1461d :: Year
d =Year -> Year -> Year
forall a. Integral a => a -> a -> a
modYear
c Year
1461y :: Year
y =Year -> Year -> Year
forall a. Ord a => a -> a -> a
min(Year -> Year -> Year
forall a. Integral a => a -> a -> a
divYear
d Year
365)Year
3yd :: DayOfYear
yd =Year -> DayOfYear
forall a. Num a => Year -> a
fromInteger(Year
d Year -> Year -> Year
forall a. Num a => a -> a -> a
-(Year
y Year -> Year -> Year
forall a. Num a => a -> a -> a
*Year
365)Year -> Year -> Year
forall a. Num a => a -> a -> a
+Year
1)year :: Year
year =Year
quadcent Year -> Year -> Year
forall a. Num a => a -> a -> a
*Year
400Year -> Year -> Year
forall a. Num a => a -> a -> a
+Year
cent Year -> Year -> Year
forall a. Num a => a -> a -> a
*Year
100Year -> Year -> Year
forall a. Num a => a -> a -> a
+Year
quad Year -> Year -> Year
forall a. Num a => a -> a -> a
*Year
4Year -> Year -> Year
forall a. Num a => a -> a -> a
+Year
y Year -> Year -> Year
forall a. Num a => a -> a -> a
+Year
1-- | Convert from ISO 8601 Ordinal Date format.-- Invalid day numbers will be clipped to the correct range (1 to 365 or 366).fromOrdinalDate ::Year ->DayOfYear ->Day fromOrdinalDate :: Year -> DayOfYear -> Day
fromOrdinalDate Year
year DayOfYear
day =Year -> Day
ModifiedJulianDay Year
mjd wherey :: Year
y =Year
year Year -> Year -> Year
forall a. Num a => a -> a -> a
-Year
1mjd :: Year
mjd =(DayOfYear -> Year
forall a b. (Integral a, Num b) => a -> b
fromIntegral(DayOfYear -> DayOfYear -> DayOfYear -> DayOfYear
forall t. Ord t => t -> t -> t -> t
clip DayOfYear
1(ifYear -> Bool
isLeapYear Year
year thenDayOfYear
366elseDayOfYear
365)DayOfYear
day ))Year -> Year -> Year
forall a. Num a => a -> a -> a
+(Year
365Year -> Year -> Year
forall a. Num a => a -> a -> a
*Year
y )Year -> Year -> Year
forall a. Num a => a -> a -> a
+(Year -> Year -> Year
forall a. Integral a => a -> a -> a
divYear
y Year
4)Year -> Year -> Year
forall a. Num a => a -> a -> a
-(Year -> Year -> Year
forall a. Integral a => a -> a -> a
divYear
y Year
100)Year -> Year -> Year
forall a. Num a => a -> a -> a
+(Year -> Year -> Year
forall a. Integral a => a -> a -> a
divYear
y Year
400)Year -> Year -> Year
forall a. Num a => a -> a -> a
-Year
678576-- | Bidirectional abstract constructor for ISO 8601 Ordinal Date format.-- Invalid day numbers will be clipped to the correct range (1 to 365 or 366).patternYearDay ::Year ->DayOfYear ->Day pattern$bYearDay :: Year -> DayOfYear -> Day
$mYearDay :: forall r. Day -> (Year -> DayOfYear -> r) -> (Void# -> r) -> r
YearDay y d <-(toOrdinalDate ->(y ,d ))whereYearDay Year
y DayOfYear
d =Year -> DayOfYear -> Day
fromOrdinalDate Year
y DayOfYear
d {-# COMPLETEYearDay #-}-- | Convert from ISO 8601 Ordinal Date format.-- Invalid day numbers return 'Nothing'fromOrdinalDateValid ::Year ->DayOfYear ->MaybeDay fromOrdinalDateValid :: Year -> DayOfYear -> Maybe Day
fromOrdinalDateValid Year
year DayOfYear
day =doDayOfYear
day' <-DayOfYear -> DayOfYear -> DayOfYear -> Maybe DayOfYear
forall t. Ord t => t -> t -> t -> Maybe t
clipValid DayOfYear
1(ifYear -> Bool
isLeapYear Year
year thenDayOfYear
366elseDayOfYear
365)DayOfYear
day lety :: Year
y =Year
year Year -> Year -> Year
forall a. Num a => a -> a -> a
-Year
1mjd :: Year
mjd =(DayOfYear -> Year
forall a b. (Integral a, Num b) => a -> b
fromIntegralDayOfYear
day' )Year -> Year -> Year
forall a. Num a => a -> a -> a
+(Year
365Year -> Year -> Year
forall a. Num a => a -> a -> a
*Year
y )Year -> Year -> Year
forall a. Num a => a -> a -> a
+(Year -> Year -> Year
forall a. Integral a => a -> a -> a
divYear
y Year
4)Year -> Year -> Year
forall a. Num a => a -> a -> a
-(Year -> Year -> Year
forall a. Integral a => a -> a -> a
divYear
y Year
100)Year -> Year -> Year
forall a. Num a => a -> a -> a
+(Year -> Year -> Year
forall a. Integral a => a -> a -> a
divYear
y Year
400)Year -> Year -> Year
forall a. Num a => a -> a -> a
-Year
678576Day -> Maybe Day
forall (m :: * -> *) a. Monad m => a -> m a
return(Year -> Day
ModifiedJulianDay Year
mjd )-- | Show in ISO 8601 Ordinal Date format (yyyy-ddd)showOrdinalDate ::Day ->StringshowOrdinalDate :: Day -> String
showOrdinalDate 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]
++(DayOfYear -> String
forall t. ShowPadded t => t -> String
show3 DayOfYear
d )where(Year
y ,DayOfYear
d )=Day -> (Year, DayOfYear)
toOrdinalDate Day
date -- | Is this year a leap year according to the proleptic Gregorian calendar?isLeapYear ::Year ->BoolisLeapYear :: Year -> Bool
isLeapYear Year
year =(Year -> Year -> Year
forall a. Integral a => a -> a -> a
modYear
year Year
4Year -> Year -> Bool
forall a. Eq a => a -> a -> Bool
==Year
0)Bool -> Bool -> Bool
&&((Year -> Year -> Year
forall a. Integral a => a -> a -> a
modYear
year Year
400Year -> Year -> Bool
forall a. Eq a => a -> a -> Bool
==Year
0)Bool -> Bool -> Bool
||Bool -> Bool
not(Year -> Year -> Year
forall a. Integral a => a -> a -> a
modYear
year Year
100Year -> Year -> Bool
forall a. Eq a => a -> a -> Bool
==Year
0))-- | Get the number of the Monday-starting week in the year and the day of the week.-- The first Monday is the first day of week 1, any earlier days in the year are week 0 (as @%W@ in 'Data.Time.Format.formatTime').-- Monday is 1, Sunday is 7 (as @%u@ in 'Data.Time.Format.formatTime').mondayStartWeek ::Day ->(WeekOfYear ,Int)mondayStartWeek :: Day -> (DayOfYear, DayOfYear)
mondayStartWeek Day
date =(Year -> DayOfYear
forall a. Num a => Year -> a
fromInteger((Year -> Year -> Year
forall a. Integral a => a -> a -> a
divYear
d Year
7)Year -> Year -> Year
forall a. Num a => a -> a -> a
-(Year -> Year -> Year
forall a. Integral a => a -> a -> a
divYear
k Year
7)),Year -> DayOfYear
forall a. Num a => Year -> a
fromInteger(Year -> Year -> Year
forall a. Integral a => a -> a -> a
modYear
d Year
7)DayOfYear -> DayOfYear -> DayOfYear
forall a. Num a => a -> a -> a
+DayOfYear
1)whereyd :: DayOfYear
yd =(Year, DayOfYear) -> DayOfYear
forall a b. (a, b) -> b
snd(Day -> (Year, DayOfYear)
toOrdinalDate Day
date )d :: Year
d =(Day -> Year
toModifiedJulianDay Day
date )Year -> Year -> Year
forall a. Num a => a -> a -> a
+Year
2k :: Year
k =Year
d Year -> Year -> Year
forall a. Num a => a -> a -> a
-(DayOfYear -> Year
forall a. Integral a => a -> Year
toIntegerDayOfYear
yd )-- | Get the number of the Sunday-starting week in the year and the day of the week.-- The first Sunday is the first day of week 1, any earlier days in the year are week 0 (as @%U@ in 'Data.Time.Format.formatTime').-- Sunday is 0, Saturday is 6 (as @%w@ in 'Data.Time.Format.formatTime').sundayStartWeek ::Day ->(WeekOfYear ,Int)sundayStartWeek :: Day -> (DayOfYear, DayOfYear)
sundayStartWeek Day
date =(Year -> DayOfYear
forall a. Num a => Year -> a
fromInteger((Year -> Year -> Year
forall a. Integral a => a -> a -> a
divYear
d Year
7)Year -> Year -> Year
forall a. Num a => a -> a -> a
-(Year -> Year -> Year
forall a. Integral a => a -> a -> a
divYear
k Year
7)),Year -> DayOfYear
forall a. Num a => Year -> a
fromInteger(Year -> Year -> Year
forall a. Integral a => a -> a -> a
modYear
d Year
7))whereyd :: DayOfYear
yd =(Year, DayOfYear) -> DayOfYear
forall a b. (a, b) -> b
snd(Day -> (Year, DayOfYear)
toOrdinalDate Day
date )d :: Year
d =(Day -> Year
toModifiedJulianDay Day
date )Year -> Year -> Year
forall a. Num a => a -> a -> a
+Year
3k :: Year
k =Year
d Year -> Year -> Year
forall a. Num a => a -> a -> a
-(DayOfYear -> Year
forall a. Integral a => a -> Year
toIntegerDayOfYear
yd )-- | The inverse of 'mondayStartWeek'. Get a 'Day' given the year,-- the number of the Monday-starting week, and the day of the week.-- The first Monday is the first day of week 1, any earlier days in the year-- are week 0 (as @%W@ in 'Data.Time.Format.formatTime').fromMondayStartWeek ::-- | Year.Year ->-- | Monday-starting week number (as @%W@ in 'Data.Time.Format.formatTime').WeekOfYear ->-- | Day of week.-- Monday is 1, Sunday is 7 (as @%u@ in 'Data.Time.Format.formatTime').Int->Day fromMondayStartWeek :: Year -> DayOfYear -> DayOfYear -> Day
fromMondayStartWeek Year
year DayOfYear
w DayOfYear
d =let-- first day of the yearfirstDay :: Day
firstDay =Year -> DayOfYear -> Day
fromOrdinalDate Year
year DayOfYear
1-- 0-based year day of first monday of the yearzbFirstMonday :: Year
zbFirstMonday =(Year
5Year -> Year -> Year
forall a. Num a => a -> a -> a
-Day -> Year
toModifiedJulianDay Day
firstDay )Year -> Year -> Year
forall a. Integral a => a -> a -> a
`mod`Year
7-- 0-based week of yearzbWeek :: DayOfYear
zbWeek =DayOfYear
w DayOfYear -> DayOfYear -> DayOfYear
forall a. Num a => a -> a -> a
-DayOfYear
1-- 0-based day of weekzbDay :: DayOfYear
zbDay =DayOfYear
d DayOfYear -> DayOfYear -> DayOfYear
forall a. Num a => a -> a -> a
-DayOfYear
1-- 0-based day in yearzbYearDay :: Year
zbYearDay =Year
zbFirstMonday Year -> Year -> Year
forall a. Num a => a -> a -> a
+Year
7Year -> Year -> Year
forall a. Num a => a -> a -> a
*DayOfYear -> Year
forall a. Integral a => a -> Year
toIntegerDayOfYear
zbWeek Year -> Year -> Year
forall a. Num a => a -> a -> a
+DayOfYear -> Year
forall a. Integral a => a -> Year
toIntegerDayOfYear
zbDay inYear -> Day -> Day
addDays Year
zbYearDay Day
firstDay fromMondayStartWeekValid ::-- | Year.Year ->-- | Monday-starting week number (as @%W@ in 'Data.Time.Format.formatTime').WeekOfYear ->-- | Day of week.-- Monday is 1, Sunday is 7 (as @%u@ in 'Data.Time.Format.formatTime').Int->MaybeDay fromMondayStartWeekValid :: Year -> DayOfYear -> DayOfYear -> Maybe Day
fromMondayStartWeekValid Year
year DayOfYear
w DayOfYear
d =doDayOfYear
d' <-DayOfYear -> DayOfYear -> DayOfYear -> Maybe DayOfYear
forall t. Ord t => t -> t -> t -> Maybe t
clipValid DayOfYear
1DayOfYear
7DayOfYear
d let-- first day of the yearfirstDay :: Day
firstDay =Year -> DayOfYear -> Day
fromOrdinalDate Year
year DayOfYear
1-- 0-based week of yearzbFirstMonday :: Year
zbFirstMonday =(Year
5Year -> Year -> Year
forall a. Num a => a -> a -> a
-Day -> Year
toModifiedJulianDay Day
firstDay )Year -> Year -> Year
forall a. Integral a => a -> a -> a
`mod`Year
7-- 0-based week numberzbWeek :: DayOfYear
zbWeek =DayOfYear
w DayOfYear -> DayOfYear -> DayOfYear
forall a. Num a => a -> a -> a
-DayOfYear
1-- 0-based day of weekzbDay :: DayOfYear
zbDay =DayOfYear
d' DayOfYear -> DayOfYear -> DayOfYear
forall a. Num a => a -> a -> a
-DayOfYear
1-- 0-based day in yearzbYearDay :: Year
zbYearDay =Year
zbFirstMonday Year -> Year -> Year
forall a. Num a => a -> a -> a
+Year
7Year -> Year -> Year
forall a. Num a => a -> a -> a
*DayOfYear -> Year
forall a. Integral a => a -> Year
toIntegerDayOfYear
zbWeek Year -> Year -> Year
forall a. Num a => a -> a -> a
+DayOfYear -> Year
forall a. Integral a => a -> Year
toIntegerDayOfYear
zbDay Year
zbYearDay' <-Year -> Year -> Year -> Maybe Year
forall t. Ord t => t -> t -> t -> Maybe t
clipValid Year
0(ifYear -> Bool
isLeapYear Year
year thenYear
365elseYear
364)Year
zbYearDay Day -> Maybe Day
forall (m :: * -> *) a. Monad m => a -> m a
return(Day -> Maybe Day) -> Day -> Maybe Day
forall a b. (a -> b) -> a -> b
$Year -> Day -> Day
addDays Year
zbYearDay' Day
firstDay -- | The inverse of 'sundayStartWeek'. Get a 'Day' given the year and-- the number of the day of a Sunday-starting week.-- The first Sunday is the first day of week 1, any earlier days in the-- year are week 0 (as @%U@ in 'Data.Time.Format.formatTime').fromSundayStartWeek ::-- | Year.Year ->-- | Sunday-starting week number (as @%U@ in 'Data.Time.Format.formatTime').WeekOfYear ->-- | Day of week-- Sunday is 0, Saturday is 6 (as @%w@ in 'Data.Time.Format.formatTime').Int->Day fromSundayStartWeek :: Year -> DayOfYear -> DayOfYear -> Day
fromSundayStartWeek Year
year DayOfYear
w DayOfYear
d =let-- first day of the yearfirstDay :: Day
firstDay =Year -> DayOfYear -> Day
fromOrdinalDate Year
year DayOfYear
1-- 0-based year day of first monday of the yearzbFirstSunday :: Year
zbFirstSunday =(Year
4Year -> Year -> Year
forall a. Num a => a -> a -> a
-Day -> Year
toModifiedJulianDay Day
firstDay )Year -> Year -> Year
forall a. Integral a => a -> a -> a
`mod`Year
7-- 0-based week of yearzbWeek :: DayOfYear
zbWeek =DayOfYear
w DayOfYear -> DayOfYear -> DayOfYear
forall a. Num a => a -> a -> a
-DayOfYear
1-- 0-based day of weekzbDay :: DayOfYear
zbDay =DayOfYear
d -- 0-based day in yearzbYearDay :: Year
zbYearDay =Year
zbFirstSunday Year -> Year -> Year
forall a. Num a => a -> a -> a
+Year
7Year -> Year -> Year
forall a. Num a => a -> a -> a
*DayOfYear -> Year
forall a. Integral a => a -> Year
toIntegerDayOfYear
zbWeek Year -> Year -> Year
forall a. Num a => a -> a -> a
+DayOfYear -> Year
forall a. Integral a => a -> Year
toIntegerDayOfYear
zbDay inYear -> Day -> Day
addDays Year
zbYearDay Day
firstDay fromSundayStartWeekValid ::-- | Year.Year ->-- | Sunday-starting week number (as @%U@ in 'Data.Time.Format.formatTime').WeekOfYear ->-- | Day of week.-- Sunday is 0, Saturday is 6 (as @%w@ in 'Data.Time.Format.formatTime').Int->MaybeDay fromSundayStartWeekValid :: Year -> DayOfYear -> DayOfYear -> Maybe Day
fromSundayStartWeekValid Year
year DayOfYear
w DayOfYear
d =doDayOfYear
d' <-DayOfYear -> DayOfYear -> DayOfYear -> Maybe DayOfYear
forall t. Ord t => t -> t -> t -> Maybe t
clipValid DayOfYear
0DayOfYear
6DayOfYear
d let-- first day of the yearfirstDay :: Day
firstDay =Year -> DayOfYear -> Day
fromOrdinalDate Year
year DayOfYear
1-- 0-based week of yearzbFirstSunday :: Year
zbFirstSunday =(Year
4Year -> Year -> Year
forall a. Num a => a -> a -> a
-Day -> Year
toModifiedJulianDay Day
firstDay )Year -> Year -> Year
forall a. Integral a => a -> a -> a
`mod`Year
7-- 0-based week numberzbWeek :: DayOfYear
zbWeek =DayOfYear
w DayOfYear -> DayOfYear -> DayOfYear
forall a. Num a => a -> a -> a
-DayOfYear
1-- 0-based day of weekzbDay :: DayOfYear
zbDay =DayOfYear
d' -- 0-based day in yearzbYearDay :: Year
zbYearDay =Year
zbFirstSunday Year -> Year -> Year
forall a. Num a => a -> a -> a
+Year
7Year -> Year -> Year
forall a. Num a => a -> a -> a
*DayOfYear -> Year
forall a. Integral a => a -> Year
toIntegerDayOfYear
zbWeek Year -> Year -> Year
forall a. Num a => a -> a -> a
+DayOfYear -> Year
forall a. Integral a => a -> Year
toIntegerDayOfYear
zbDay Year
zbYearDay' <-Year -> Year -> Year -> Maybe Year
forall t. Ord t => t -> t -> t -> Maybe t
clipValid Year
0(ifYear -> Bool
isLeapYear Year
year thenYear
365elseYear
364)Year
zbYearDay Day -> Maybe Day
forall (m :: * -> *) a. Monad m => a -> m a
return(Day -> Maybe Day) -> Day -> Maybe Day
forall a b. (a -> b) -> a -> b
$Year -> Day -> Day
addDays Year
zbYearDay' Day
firstDay 

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