Подтвердить что ты не робот

Как получить временную метку Unix в Clojure?

Я хочу знать, какова текущая временная метка. Лучшее, что я могу сделать до сих пор, это определить мою собственную функцию, которая делает это:

(int (/ (.getTime (java.util.Date.)) 1000))

Существует ли стандартная функция для получения отметки времени Unix с помощью clojure?

4b9b3361

Ответ 1

Практически все механизмы временной метки JVM измеряют время в миллисекундах с эпохи - так что нет, ничего стандартного **, что даст секунды с эпохи.

Ваша функция может быть слегка упрощена как:

(quot (System/currentTimeMillis) 1000)

** Joda может иметь что-то подобное, но потянуть в стороннюю библиотеку для этого, похоже, слишком много.

Ответ 2

Я бы пошел с clj-time, стандартной библиотекой Clojure для работы со временем и датами (wrapping Joda-Time). Да, это лишняя зависимость для простой потребности и может быть чрезмерной, если вы действительно хотите только текущую временную метку; даже тогда это просто приятное удобство практически без затрат. И если вам в конечном итоге понадобится дополнительная функциональность, связанная с временем, тогда она будет там с большой реализацией всех основ.

Что касается кода, здесь спецификатор зависимостей Leiningen для текущей версии:

[clj-time "0.5.1"]

И вот фрагмент для получения текущей метки времени:

(require '[clj-time.core :as time]
         '[clj-time.coerce :as tc])

;; milliseconds since Unix epoch
(tc/to-long (time/now))

;; also works, as it would with other JVM date and time classes
(tc/to-long (java.util.Date.))

Ответ 3

(defn unix-time-real
  "Taken from
  System/currentTimeMillis."
  []
  (/ (System/currentTimeMillis) 1000))