Haskell:
Сравнение двух дат
Как это сделать:
Haskell, известный своей чистотой, требует от вас общения на языке дат с правильными библиотеками. Давайте используем Data.Time
.
import Data.Time
-- Определение двух дат
date1 :: UTCTime
date1 = UTCTime (fromGregorian 2023 4 1) (secondsToDiffTime 0)
date2 :: UTCTime
date2 = UTCTime (fromGregorian 2024 4 2) (secondsToDiffTime 3600)
-- Сравнение дат
compareDates :: UTCTime -> UTCTime -> Ordering
compareDates = compare
main :: IO ()
main = do
print $ date1 `compareDates` date2 -- Вывод будет LT
print $ date2 `compareDates` date1 -- Вывод будет GT
print $ date1 `compareDates` date1 -- Вывод будет EQ
Просто, правда? LT
для меньше чем, GT
для больше чем, и EQ
для равно.
Глубже в тему
В прошлом, управление временем в Haskell не было таким гладким. Мы обязаны нашим текущим удобствам прогрессу библиотеки Data.Time
на протяжении лет. Она предлагает нам UTCTime
, счастливо однозначную точку во времени.
Альтернативы? Конечно. Вам могут пригодиться Data.Time.Calendar
и Data.Time.Clock
для конкретных сценариев. Также есть старая библиотека time
для тех, кто ностальгирует или работает с устаревшим кодом.
Теперь к сути: Сравнение дат в Haskell основывается на UTCTime
, который сочетает в себе день (Day
) и время (DiffTime
или NominalDiffTime
). Здесь важную роль играет функция compare
, которая является активным участником класса Ord
, позволяя нам использовать >, <, ==
и так далее. Просто помните, что Haskell любит свою типобезопасность. Убедитесь, что вы всегда сравниваете яблоки с яблоками, или, в нашем случае, UTCTime
с UTCTime
.
Смотрите также
Углубитесь в тему или найдите помощь с этими ресурсами: