Haskell:
Beräkna ett datum i framtiden eller förflutenheten
Hur gör man:
För att räkna ut datumen i Haskell, använd Data.Time
biblioteket:
import Data.Time
main :: IO ()
main = do
-- Dagens datum
today <- getCurrentTime
let (year, month, day) = toGregorian . utctDay $ today
putStrLn $ "Idag är det: " ++ show year ++ "-" ++ show month ++ "-" ++ show day
-- Lägger till 10 dagar till dagens datum
let tenDaysLater = addDays 10 (utctDay today)
putStrLn $ "Om 10 dagar: " ++ show (toGregorian tenDaysLater)
-- Tar bort 7 dagar från dagens datum
let sevenDaysAgo = addDays (-7) (utctDay today)
putStrLn $ "För 7 dagar sedan var det: " ++ show (toGregorian sevenDaysAgo)
Sample output:
Idag är det: 2023-4-5
Om 10 dagar: (2023,4,15)
För 7 dagar sedan var det: (2023,3,29)
Fördjupning
Att räkna ut datum har varit en del av programmering ända sedan de första kalenderapparna på datorerna. Historiskt sett använde man enkel aritmetik eller specialbyggda algoritmer. I Haskell förenklas uppgiften med Data.Time
biblioteket, som hanterar komplexiteter som skottår och tidszoner. Alternativ inkluderar att skriva egen kod för beräkningar eller använda andra bibliotek som time
och old-time
. Viktiga implementeringsdetaljer att komma ihåg är att datum och tid är lokala för användarens tidszon och det behöver ofta omvandlas till UTC för att göra korrekta beräkningar.