如何在Clojure中获取Unix时间戳?

时间:2013-07-02 17:30:15

标签: clojure timestamp unix-timestamp

我想知道当前的时间戳是什么。到目前为止,我能做的最好的事情是定义我自己的功能:

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

是否有使用clojure获取Unix时间戳的标准函数?

3 个答案:

答案 0 :(得分:49)

几乎所有基于JVM的时间戳机制都将时间测量为自纪元以来的毫秒数 - 所以没有,没有任何标准**会给出自纪元以来的秒数。

您的功能可以略微简化为:

(quot (System/currentTimeMillis) 1000)

** Joda可能会有类似的内容,但为此提入第三方库似乎有点矫枉过正。

答案 1 :(得分:15)

我会选择标准的Clojure库clj-time来处理时间和日期(包裹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.))

答案 2 :(得分:-3)

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