Порівняння двох дат

Clojure:
Порівняння двох дат

Як це зробити:

Clojure має вбудовані функції для роботи з датами, використовуючи java.util.Date, але працювати з java.time.LocalDate буде краще через імутабельність.

(require '[clj-time.core :as t])
(require '[clj-time.format :as f])

;; Припустимо, маємо дві дати в рядках, перетворимо їх в LocalDate:
(def date-str-1 "2023-03-15")
(def date-str-2 "2023-03-20")

(def fmt (f/formatters :basic-date))
(def date-1 (t/local-date (f/parse fmt date-str-1)))
(def date-2 (t/local-date (f/parse fmt date-str-2)))

;; Порівнюємо дати:
(t/before? date-1 date-2) ;; -> true, оскільки date-1 є до date-2
(t/after? date-1 date-2) ;; -> false, оскільки date-1 не є після date-2
(t/equal? date-1 date-2) ;; -> false, оскільки date-1 не дорівнює date-2

В глибину:

У Clojure для порівняння дат більш звично використовувати clj-time, який є обгорткою для Joda-Time до виходу Java 8. Після Java 8 рекомендується використовувати java.time.* API, через його імутабельність та краще API.

Існують альтернативи, наприклад, cljc.java-time бібліотека, яка намагається забезпечити однаковий досвід у Clojure і ClojureScript, опираючись на java.time and JS-Joda відповідно.

Робота із часовими зонами та літнім часом може спричинити непередбачувані результати, тому важливо правильно використовувати часові зони при порівнянні дат.

Посилання: