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
надежным выбором.