如何使用clojure.java-time from#inst Date literal获得java.time DateTime?

如何使用clojure.java-time from#inst Date literal获得java.time DateTime?,clojure,java-time,Clojure,Java Time,使用它可以解析#inst Date文本,如下所示: (require '[clj-time.coerce :as c]) (c/from-date #inst "2012-12-12") ;; => #object[org.joda.time.DateTime 0x4a251269 "2012-12-12T00:00:00.000Z"] 如何使用新的java.time包装器实现这一点?请注意:Joda time和包装它的clj time库都已弃用。对于大多数任务,您应该通过java in

使用它可以解析#inst Date文本,如下所示:

(require '[clj-time.coerce :as c])
(c/from-date #inst "2012-12-12")
;; => #object[org.joda.time.DateTime 0x4a251269 "2012-12-12T00:00:00.000Z"]

如何使用新的java.time包装器实现这一点?

请注意:Joda time和包装它的
clj time
库都已弃用。
对于大多数任务,您应该通过java interop使用
java.time
。还有一些你可能会发现有用的


Clojure将每个
#inst
文本转换为
java.util.Date
对象。您所需要的只是内置的
.toInstant()
方法:

(ns tst.demo.core
  (:use demo.core tupelo.core tupelo.test)
  (:import [java.time ZonedDateTime ZoneId]))

(defn inst->date-time
  "Convert a java.time.Instant to a DateTime for the supplied ZoneId"
  [inst zoneid]
  (.toLocalDate zdt-utc
    (ZonedDateTime/ofInstant instant zoneid)))
    
(dotest
  (let [may-4    #inst "2018-05-04T01:23:45.678-00:00" ; a java.util.Date
        instant  (.toInstant may-4) ]
    (spyxx may-4)
    (spyx instant)
    (println "utc =>" (inst->date-time instant (ZoneId/of "UTC")))
    (println "nyc =>" (inst->date-time instant (ZoneId/of "America/New_York")))
    ))
结果

may-4    => <#java.util.Date #inst "2018-05-04T01:23:45.678-00:00">
instant  => #object[java.time.Instant 0x2207eb9f "2018-05-04T01:23:45.678Z"]
utc      => #object[java.time.LocalDate 0x62b5a16f 2018-05-04]
nyc      => #object[java.time.LocalDate 0x379b6a27 2018-05-03]
may-4=>
instant=>#object[java.time.instant 0x2207eb9f“2018-05-04T01:23:45.678Z”]
utc=>#对象[java.time.LocalDate 0x62b5a16f 2018-05-04]
nyc=>#对象[java.time.LocalDate 0x379b6a27 2018-05-03]
这个对
j.u.Date
的扩展是在
Java.time
包的同时添加到Java中的,目的正是为了方便代码从
Java.util.Date
转换到
Java.time

请注意,您仍然需要小心,因为示例instant会生成两个不同的
LocalDate
对象,具体取决于所使用的时区


如果您使用的是
java.time
软件包,您可能会对我编写的程序感兴趣。给出助手函数和与本机
java.time
函数互操作的好例子


如果您正在那里寻找一个函数,但没有找到它,那么它很可能已经存在于
java.time
包中,并且可以通过java interop直接使用
java.time
是一个经过深思熟虑的库(由上一个
Joda-time
库的作者编写)。
java.time
的大多数功能都很简单,很容易从Clojure中使用,而且没有包装器功能。

你是说LocalDateTime吗?DateTime来自joda。