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

Posted

技术标签:

【中文标题】如何在 Clojure 中获取 Unix 时间戳?【英文标题】:How do I get a Unix Timestamp in Clojure? 【发布时间】:2013-06-30 04:49:31 【问题描述】:

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

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

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

【问题讨论】:

不要使用int(int (/ (.getTimeInMillis (java.util.GregorianCalendar. 2038 1 20)) 1000)) ;=> IllegalArgumentException Value out of range for int: 2150258400。请改用quot,例如(-> (java.util.Date.) .getTime (quot 1000)). 【参考方案1】:

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

你的函数可以稍微简化为:

(quot (System/currentTimeMillis) 1000)

** Joda 可能有这样的东西,但是为此引入第三方库似乎有点过头了。

【讨论】:

谢谢,除了数学清理(System/currentTimeMillis) 更清楚了。【参考方案2】:

我会选择 clj-time,这是用于处理时间和日期的标准 Clojure 库(包装 Joda-Time)。是的,对于一个简单的需求,它是一个额外的依赖,如果你真的只想要当前的时间戳,它可能会有点过分;即使这样,它也只是一个很好的便利,几乎没有成本。如果您最终确实需要额外的与时间相关的功能,那么它会很好地实现所有基础知识。

至于代码,这里是当前版本的 Leiningen 依赖说明符:

[clj-time "0.15.2"]

这是一个获取当前时间戳的sn-p:

(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))

【讨论】:

这将返回一个比率,而您可能需要一个整数。请参阅 Alex 的回答。

以上是关于如何在 Clojure 中获取 Unix 时间戳?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 TwinCAT3 中获取 unix 时间戳?

PHP 如何在 unix 中获取服务器的时间戳? [复制]

如何从 postgres 获取时间戳作为 Unix 纪元?

如何每隔一天自动获取 Unix 时间戳?

如何从 JS 中的 Y-m-d 日期获取 unix 时间戳?

php如何取得十三位unix时间戳