Clojure 如何将时间打印为#inst

Clojure 如何将时间打印为#inst,clojure,Clojure,日期文字很容易阅读: (read-string "#inst \"2012\"") ;;; ⇒ #inst "2012-01-01T00:00:00.000-00:00" 如何将日期输出为#inst.文本 这不起作用: (pr-str (clj-time.core/now)) ;;; ⇒ "#<DateTime 2013-07-09T17:26:30.058Z>" (read-string (pr-str (clj-time.core/now)))

日期文字很容易阅读:

(read-string "#inst \"2012\"")
        ;;; ⇒ #inst "2012-01-01T00:00:00.000-00:00"
如何将日期输出为
#inst.
文本

这不起作用:

(pr-str (clj-time.core/now))
        ;;; ⇒ "#<DateTime 2013-07-09T17:26:30.058Z>"

(read-string (pr-str (clj-time.core/now)))
        ;;; ⇒ <err>
        ;;;   RuntimeException Unreadable form  clojure.lang.Util.runtimeException (Util.java:219)
(pr str(clj time.core/now))
;;; ⇒ "#"
(读取字符串(pr str(clj time.core/now)))
;;; ⇒ 
;;;   RuntimeException不可读表单clojure.lang.Util.RuntimeException(Util.java:219)
当您读入
#inst
文本时,默认情况下会创建一个
java.util.Date
实例。它们在
clojure.instant
命名空间中为
print method
(负责对象打印表示的多方法)定义了一个方法(1.5.1源代码的相关片段为)

clj time使用Joda time中的
DateTime
类型,该类型没有设置自定义的
打印方法
方法。这是有道理的,因为很少需要使用
打印方法
,该方法生成不往返的表示。为了让它往返,您必须使用非标准的
#inst
读卡器。要实现这一点,如果您正在读取edn数据,可以使用
clojure.edn/read
(或
read string
)将文档字符串中记录的相应读取器传入:

(require '[clojure.edn :as edn])

(edn/read {:readers {'inst your-inst-reader}} rdr)
当使用clj time时,
您的inst reader
将类似于
#(clj-time.format/parse some formatter%)
。然后,您可以按照
clojure.instant
的示例提供匹配的
打印方法
定义。(或者您可以只提供
print方法
定义,并记住您不会得到完美的往返;clj time提供了非常方便的强制功能——请参见下文——所以这可能没问题。)


或者,您可以打印和读取
java.util.Date
实例,并将它们转换为
DateTime
s;在
clj time.concure

中有这样做的函数。我正在使用clojure 1.5.1,在REPL
(java.util.Date.)中输入以下内容。
打印
#inst“2013-07-09T18:05:53.231-00:00”
。注意
clj time.core/now
是一个DateTime对象,就是Joda。哦,我明白了,我的错误。谢谢:)。如何将
DateTime
转换为
java.util.Date
并将其打印?我最终强制转换为java.util.Date。我问上游是否可以提供一个通用解决方案:等等,那么如何将时间戳打印为
#而不是“YYYY-MM…”