Berechnung eines zukünftigen oder vergangenen Datums

Haskell:
Berechnung eines zukünftigen oder vergangenen Datums

How to:

import Data.Time

-- Ein Datum in der Zukunft berechnen
addDaysToCurrent :: Integer -> IO Day
addDaysToCurrent n = do
    today <- utctDay <$> getCurrentTime
    return $ addDays n today

-- Ein Datum in der Vergangenheit berechnen
subtractDaysFromCurrent :: Integer -> IO Day
subtractDaysFromCurrent n = addDaysToCurrent (-n)

-- Beispiel Nutzung
main :: IO ()
main = do
    futureDate <- addDaysToCurrent 10
    putStrLn $ "In 10 Tagen wird es der " ++ show futureDate ++ " sein."
    
    pastDate <- subtractDaysFromCurrent 10
    putStrLn $ "Vor 10 Tagen war es der " ++ show pastDate ++ "."

Sample Output:

In 10 Tagen wird es der 2023-04-30 sein.
Vor 10 Tagen war es der 2023-04-10.

Deep Dive

In Haskell berechnen wir Daten mit der Bibliothek ‘Data.Time’. Sie ist robust und dabei weit verbreitet. Historisch gesehen war das Rechnen mit Zeiten schon immer wichtig, für Kalender oder Astronomie. Andere Programmiersprachen bieten ähnliche Bibliotheken; in Java wäre das java.time, in Python datetime.

In der Implementierung kümmert sich ‘Data.Time’ um Schaltjahre, verschiedene Kalendersysteme und Zeitberechnungen. Es benutzt ‘UTCTime’ für die aktuelle Zeit, welches Zeitzonen-unabhängig ist und dann konvertiert es das zur lokalen Zeitzone wenn nötig.

See Also