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.

Смотрите также

Углубитесь в тему или найдите помощь с этими ресурсами: