Clojure:
Сравнение двух дат

Как это сделать:

Clojure использует возможности взаимодействия с Java для работы с датами. Давайте закатаем рукава и нырнем в это:

;; Импорт класса Date из Java
(import java.util.Date)

;; Создание двух экземпляров даты
(def date1 (java.util.Date.))
(Thread/sleep 1000) ;; Подождем немного
(def date2 (java.util.Date.))

;; Сравнение дат
(println (.before date1 date2)) ; true, date1 раньше date2
(println (.after date1 date2))  ; false, date1 не после date2
(println (.equals date1 date2)) ; false, date1 не та же самая, что и date2

Пример вывода может выглядеть так, но с другими временными метками:

true
false
false

Глубокое погружение

Ранее разработчики на Clojure часто использовали Date из Java для операций с датами, вызывая методы с использованием оператора точки, как было показано выше. Альтернативы включают clj-time, библиотеку Clojure, которая оборачивает Joda-Time.

Пример использования clj-time выглядит следующим образом:

;; Добавьте clj-time в зависимости вашего проекта
(require '[clj-time.core :as time])
(require '[clj-time.coerce :as coerce])

;; Создание двух экземпляров date-time
(def date-time1 (time/now))
(Thread/sleep 1000) ;; Подождем секунду
(def date-time2 (time/now))

;; Сравнение с использованием функций clj-time
(println (time/before? date-time1 date-time2)) ; true
(println (time/after? date-time1 date-time2))  ; false
(println (time/equal? date-time1 date-time2))  ; false

Позиция Clojure по времени заключается в использовании библиотек Java, в то время как clj-time интегрируется с Joda-Time для более идиоматического опыта Clojure.

Начиная с Java 8, пакет java.time — вдохновленный Joda-Time — является предпочтительным способом работы с датами и временем в Java и, соответственно, в Clojure через взаимодействие. Улучшенный дизайн и дополнительные возможности, такие как часовые пояса, делают java.time надежным выбором.

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