如何在Clojure中获取Unix时间戳?
我想知道当前的时间戳是什么。到目前为止,我所能做的最好的事情就是定义我自己的函数:如何在Clojure中获取Unix时间戳?,clojure,timestamp,unix-timestamp,Clojure,Timestamp,Unix Timestamp,我想知道当前的时间戳是什么。到目前为止,我所能做的最好的事情就是定义我自己的函数: (int (/ (.getTime (java.util.Date.)) 1000)) 是否有一个标准函数可以使用clojure获取Unix时间戳?几乎所有基于JVM的时间戳机制都以从纪元开始的毫秒为单位测量时间-因此,没有任何标准**会给出从纪元开始的秒数 您的功能可以稍微简化为: (quot (System/currentTimeMillis) 1000) **可能有类似的功能,但引入第三方库似乎有些过分
(int (/ (.getTime (java.util.Date.)) 1000))
是否有一个标准函数可以使用clojure获取Unix时间戳?几乎所有基于JVM的时间戳机制都以从纪元开始的毫秒为单位测量时间-因此,没有任何标准**会给出从纪元开始的秒数 您的功能可以稍微简化为:
(quot (System/currentTimeMillis) 1000)
**可能有类似的功能,但引入第三方库似乎有些过分。我会选择标准的Clojure库,用于处理时间和日期(包装)。是的,对于一个简单的需求来说,它是一个额外的依赖项,如果您真的只想要当前的时间戳,那么它可能会有点过分;即使这样,它也只是一种几乎不需要花费的方便。如果您最终需要额外的与时间相关的功能,那么它将提供所有基本功能的出色实现
对于代码,以下是当前版本的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.))
不要使用
int
:(int(/(.getTimeInMillis(java.util.GregorianCalendar.20381 20))1000));=>IllegalArgumentException值超出int:2150258400的范围。请尝试quot
,例如(>(java.util.Date.).getTime(quot 1000))
。谢谢,数学清理将(System/currentTimeMillis)
放在一边。谢谢,如果您正在进行重要的时间计算,这绝对是一个很好的解决方案。这将返回一个比率,而您可能需要一个整数。见亚历克斯的回答。
(defn unix-time-real
"Taken from
System/currentTimeMillis."
[]
(/ (System/currentTimeMillis) 1000))