Haskell:
Jämföra två datum
Så här gör du:
För att jämföra datum i Haskell, kan du använda Data.Time
biblioteket. Se exempel nedan:
import Data.Time
-- Skapa två datum
date1 :: UTCTime
date1 = UTCTime (fromGregorian 2023 4 14) (secondsToDiffTime 0)
date2 :: UTCTime
date2 = UTCTime (fromGregorian 2023 5 18) (secondsToDiffTime 0)
-- Jämför de två datumen
compareDates :: UTCTime -> UTCTime -> Ordering
compareDates = compare
-- Exempelanvändning och utmatning
main :: IO ()
main = do
print $ date1 == date2 -- False
print $ date1 /= date2 -- True
print $ date1 < date2 -- True
print $ compareDates date1 date2 -- LT (Less Than)
Fördjupning
I Haskell, har Data.Time
biblioteket blivit standard för datum- och tidsmanipulationer sedan det introducerades. Det finns alternativ, som time-recurrence
för att hantera återkommande händelser, men Data.Time
är mest komplett för datumjämförelser.
Jämförelsen bygger på UTCTime
, vilket är en tidspunkt i koordinerad universell tid (UTC). Detta innebär att jämförelserna är tidszonsoberoende, vilket är praktiskt för konsistent beteende oavsett användarens plats.
Implementeringen av compare
i bakgrunden använder operatörerna ==
, /=
, <
, <=
, >
, >=
, som är del av Ord
typeklassen, vilket ger en kraftfull och generell jämförelsemekanism i Haskell.
Se även
- Haskells officiella dokumentation för
Data.Time
: https://hackage.haskell.org/package/time-1.9.3/docs/Data-Time.html - Läs mer om
Ord
typeklassen: https://hackage.haskell.org/package/base-4.14.0.0/docs/Prelude.html#t:Ord - Ett djupdyk i tid och datum i Haskell: https://www.schoolofhaskell.com/school/to-infinity-and-beyond/older-but-still-useful/time