在Clojure中获取日期和时间的最佳方式是什么?

Ali*_*Ali 35 java datetime clojure

我需要在Clojure Client-Server方案中记录一些事件,但在我看来,Clojure不提供日期/时间功能.任何人都可以证实这一点,或者我在这里遗漏了什么?!如果我是正确的那么我需要使用java互操作,对吧?

Gor*_*vic 48

如果只需要获取记录器的当前时间和日期,那么此功能就可以了:

 (defn now [] (new java.util.Date))
Run Code Online (Sandbox Code Playgroud)

既然你提到了这一点,那么支持不可变的Date对象会很有用.

  • `(defn now [](java.util.Date.))`是规范版本. (37认同)

Bra*_*och 24

Java 1.8将java.time包添加到核心JDK中,以清除Java中日期和时间状态的许多挫折.由于java.time现在是核心Java的一个广泛可用的部分,具有大大改进的API,我建议您在编写新的日期和时间代码时首先考虑它.

以下是检索当前日期和时间的方法:

(java.time.LocalDateTime/now)
Run Code Online (Sandbox Code Playgroud)

  • => (.toString(java.time.LocalDateTime/now)) ;; =>“2021-03-23T16:23:14.679916”这是我觉得有用的东西 (3认同)

rob*_*x44 16

Joda-Time有一个Clojure包装库.或者您必须使用Java interop与标准Java API.

  • @Ali - 一个理智的日期时间库是你应该认真考虑的依赖; 遗憾的是,标准库(对于许多语言而言)并不总是足够精确. (7认同)

Ken*_*itt 9

使用clj-time,包装Java Joda Time库的Clojure库,您可以使用如下代码:

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

(time/now) => #<DateTime 2013-03-31T03:23:47.328Z>

(def time-formatter (time-format/formatters :basic-date-time))  ;; ISO 8601 UTC format
(time-format/unparse custom-formatter (date-time 2010 10 3)) => "20101003T000000.000Z"
Run Code Online (Sandbox Code Playgroud)

Joda Time(以及clj-time)的一个好处是新版本支持对时区的新更改.

  • 该库现已弃用 (2认同)

elf*_*elf 6

如果你不需要更高级的东西,只需使用Java类.

(.format (java.text.SimpleDateFormat. "MM/dd/yyyy") (new java.util.Date))