Day of the week: Difference between revisions

→‎{{header|Haskell}}: Updated system.time version output for 64bit systems and current GHC builds (+ hlint hindent)
(→‎{{header|Haskell}}: Updated system.time version output for 64bit systems and current GHC builds (+ hlint hindent))
Line 1,422:
=={{header|Haskell}}==
Using the time library:
<lang haskell>import Data.Time (fromGregorian)
import Data.Time.Calendar.WeekDate
 
import Data.Time.Calendar.WeekDate (toWeekDate)
isXmasSunday year = wday == 7
where (_,_,wday) = toWeekDate $ fromGregorian year 12 25
 
isXmasSunday :: Integer -> Bool
main = mapM_ putStrLn ["25 December " ++ show year ++ " is Sunday"
isXmasSunday year = wday == 7
| year <- [2008..2121], isXmasSunday year]</lang>
wherelet (_, _, wday) = toWeekDate $ fromGregorian year 12 25
in wday == 7
 
main :: IO ()
main =
mapM_
putStrLn
main = mapM_ putStrLn [ "25 December " ++ show year ++ " is Sunday"
| year <- [2008 .. 2121]
| year <- [2008..2121], isXmasSunday year ]</lang>
{{out}}
<pre>
Line 1,451 ⟶ 1,459:
</pre>
 
The built-in System.Time module overflowscan overflow at the Unix epoch in 2038:
<lang haskell>import System.Time
 
isXmasSunday :: Int -> Bool
isXmasSunday year = ctWDay cal == Sunday
where
where cal = toUTCTime $ toClockTime cal'
cal = toUTCTime $ toClockTime cal' = CalendarTime {
cal' =
ctYear = year,
CalendarTime
ctMonth = December,
{ ctDayctYear = 25,year
, ctHourctMonth = 0,December
, ctMinctDay = 0,25
, ctSecctHour = 0,
, ctPicosecctMin = 0,
, ctWDayctSec = Friday,0
, ctYDayctPicosec = 0,
, ctTZNamectWDay = "",Friday
, ctTZctYDay = 0,
, ctIsDSTctTZName = False""
, ctTZ = }0
, ctIsDST = False
}
 
main :: IO ()
main = mapM_ putStrLn ["25 December " ++ show year ++ " is Sunday"
main =
| year <- [2008..2121], isXmasSunday year]</lang>
mapM_
putStrLn
main = mapM_ putStrLn [ "25 December " ++ show year ++ " is Sunday"
| year <- [2008 .. 2121]
| year <- [2008..2121], isXmasSunday year ]</lang>
{{out}} on 32-bit machine:
<pre>
Line 1,481 ⟶ 1,497:
*** Exception: user error (Time.toClockTime: invalid input)
</pre>
but with 64 bit systems, running current versions of GHC:
<pre>
25 December 2011 is Sunday
25 December 2016 is Sunday
25 December 2022 is Sunday
25 December 2033 is Sunday
25 December 2039 is Sunday
25 December 2044 is Sunday
25 December 2050 is Sunday
25 December 2061 is Sunday
25 December 2067 is Sunday
25 December 2072 is Sunday
25 December 2078 is Sunday
25 December 2089 is Sunday
25 December 2095 is Sunday
25 December 2101 is Sunday
25 December 2107 is Sunday
25 December 2112 is Sunday
25 December 2118 is Sunday</pre>
 
=={{header|HicEst}}==
9,659

edits