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
- Das
Data.Time
Paket auf Hackage: Data.Time - Eine tiefere Einführung in
Data.Time
: Haskell Data.Time tutorial - ISO 8601 Date and Time Formats (für Standardisierung): ISO 8601
- Haskell Programming from first principles: HaskellBook