Haskell:
Kahden päivämäärän vertailu
How to:
import Data.Time
-- Oletetaan kaksi päivämäärää
date1 :: UTCTime
date1 = UTCTime (fromGregorian 2023 3 25) (secondsToDiffTime 0)
date2 :: UTCTime
date2 = UTCTime (fromGregorian 2023 3 26) (secondsToDiffTime 0)
-- Vertaillaan päivämääriä
compareDates :: UTCTime -> UTCTime -> Ordering
compareDates = compare
main :: IO ()
main = do
putStrLn $ "Vertailu tulos: " ++ show (compareDates date1 date2)
Esimerkin tulostus:
Vertailu tulos: LT
Deep Dive
Haskellissa päivämäärien vertailu hyödyntää Data.Time
-kirjastoa, joka on osa laajempaa time
-pakettia. Päivämäärät esitetään UTCTime
-tyypin avulla, joka kuvaa yleistä koordinoitua aikaa. Historiallisesti, päivämäärien käsittely on kehittynyt ohjelmoinnissa, mukana monia eri kirjastoja ja lähestymistapoja. time
-kirjasto on kuitenkin nykyään yleisimmin käytetty Haskellin standardikirjastossa ajan käsittelyyn.
Käytännöllisesti, compare
-funktio auttaa meitä suorittamaan vertailun, palauttaen Ordering
-tyypin arvon (LT
pienempi, EQ
yhtä suuri, GT
suurempi). Tässä yksinkertaisuus on voimaa; ei tarvitse uudelleen keksiä pyörää, vaan voimme luottaa standardikirjaston tarjoamiin välineisiin.
Muita vaihtoehtoja päivämäärien vertailuun on olemassa, esimerkiksi time-lens
kirjasto, joka tarjoaa monimutkaisempia ajan manipulointityökaluja. Mutta useimpiin tarpeisiin Data.Time
riittää mainiosti.
See Also
- Haskell
time
-kirjaston dokumentaatio: https://hackage.haskell.org/package/time - Haskell
time-lens
-kirjasto parempaan ajanhallintaan: https://hackage.haskell.org/package/time-lens - HaskellWiki, ajan ja päivämäärien käsittelystä: https://wiki.haskell.org/Working_with_time