Мне нужно зарегистрировать некоторые события в сценарии Clojure Client-Server, но мне кажется, что Clojure не предоставляет функцию даты/времени. Может ли кто-нибудь подтвердить это или я что-то упустил?! Если я прав, мне нужно использовать java interop, правильно?
Каков наилучший способ получить дату и время в Clojure?
Ответ 1
Если вам нужно только получить текущее время и дату для вашего регистратора, то эта функция в порядке:
(defn now [] (new java.util.Date))
Теперь, когда вы упомянули об этом, было бы полезно иметь поддержку неизменяемых объектов Date.
Ответ 2
Существует библиотека Clojure -wrapper для Joda-Time. Или вам придется использовать java-взаимодействие со стандартным API Java.
Ответ 3
Java 1.8 добавила пакет java.time в основной JDK для очистки многих разочарований с состоянием даты и времени на Java. Поскольку java.time теперь является широко доступной частью базовой Java с улучшенным API, я бы посоветовал вам придать ему первый взгляд при написании нового кода даты и времени.
Пример:
(java.time.LocalDateTime/now)
Ответ 4
С clj-time, библиотекой Clojure, которая обертывает библиотеку времени Java Joda, вы можете использовать следующий код:
(require '[clj-time.core :as time])
(require '[clj-time.format :as time-format])
(time/now) => #<DateTime 2013-03-31T03:23:47.328Z>
(def time-formatter (time-format/formatters :basic-date-time)) ;; ISO 8601 UTC format
(time-format/unparse custom-formatter (date-time 2010 10 3)) => "20101003T000000.000Z"
Одно из преимуществ Joda Time (и, следовательно, clj-time) заключается в том, что новые версии поддерживают новые изменения в часовых поясах.
Ответ 5
Если вам не нужно ничего более продвинутого, просто используйте классы Java.
(.format (java.text.SimpleDateFormat. "MM/dd/yyyy") (new java.util.Date))