Как получить временную метку Unix в Clojure?
Я хочу знать, какова текущая временная метка. Лучшее, что я могу сделать до сих пор, это определить мою собственную функцию, которая делает это:
(int (/ (.getTime (java.util.Date.)) 1000))
Существует ли стандартная функция для получения отметки времени Unix с помощью clojure?
Ответы
Ответ 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))