Haskell:
Vergleich von zwei Daten
Anleitung:
In Haskell vergleichen wir Daten mit den üblichen Vergleichsoperatoren, nachdem wir sie mit parseTimeM
geparst haben. Hier ein kurzes Beispiel:
import Data.Time
import Data.Time.Format
-- Zuerst beide Daten als Strings
dateStr1 = "2023-03-25"
dateStr2 = "2023-03-26"
-- Parse-Funktion, um String in ein Datum umzuwandeln
parseDate :: String -> IO Day
parseDate = parseTimeM True defaultTimeLocale "%Y-%m-%d"
-- Vergleich von zwei Daten
main :: IO ()
main = do
date1 <- parseDate dateStr1
date2 <- parseDate dateStr2
putStrLn $ "Datum 1 ist vor Datum 2: " ++ show (date1 < date2)
putStrLn $ "Datum 1 ist gleich Datum 2: " ++ show (date1 == date2)
putStrLn $ "Datum 1 ist nach Datum 2: " ++ show (date1 > date2)
Für das Beispiel lautet die Ausgabe:
Datum 1 ist vor Datum 2: True
Datum 1 ist gleich Datum 2: False
Datum 1 ist nach Datum 2: False
Deep Dive:
Haskell verwendet das Data.Time
-Modul zur Datum- und Zeitbehandlung, das mit dem Paket time
kommt. Vor diesem Paket gab es verschiedene Alternativen und Zusatzbibliotheken, doch time
ist inzwischen Standard.
Ein Datum in Haskell ist ein Wert des Typs Day
, der intern als eine Anzahl von Tagen seit einer festgelegten Ära (the Modified Julian Date) gespeichert wird. Der Vergleich erfolgt daher einfach als Vergleich dieser ganzzahligen Werte.
Neben parseTimeM
gibt es verschiedene Funktionen, um mit Datums- und Zeitwerten zu arbeiten, wie diffDays
, um die Differenz zwischen zwei Daten zu berechnen, oder addDays
, um eine Anzahl von Tagen zu einem Datum hinzu zuzählen.
In der Praxis könnten noch Zeitzonen und Sommerzeit eine Rolle spielen, was das comparieren komplizierter gestalten kann, hier könnte utcToLocalTime
oder zonedTimeToUTC
nützlich sein.