Datetime Clojure:序列化和解析文件的日期/时间?
我想将一些测试数据存储到一个文件中,并在测试中再次读取它。数据是Clojure映射的序列,其中一个属性是Datetime Clojure:序列化和解析文件的日期/时间?,datetime,clojure,jodatime,clj-time,Datetime,Clojure,Jodatime,Clj Time,我想将一些测试数据存储到一个文件中,并在测试中再次读取它。数据是Clojure映射的序列,其中一个属性是clj时间(org.joda.time.DateTime)日期/时间。当我将值写入文件(使用spit)时,它将序列化为#。当我试着读回它时(用slurp),我得到: 我想这并不奇怪,因为如果没有更多的信息,我不知道如何解析DateTime。是否有某种方法可以读取这些值并正确解析它们,或者我必须将它们序列化为字符串,并在读取它们时手动解析它们?Clojure为java.util.Date use
clj时间
(org.joda.time.DateTime
)日期/时间。当我将值写入文件(使用spit
)时,它将序列化为#
。当我试着读回它时(用slurp
),我得到:
我想这并不奇怪,因为如果没有更多的信息,我不知道如何解析
DateTime
。是否有某种方法可以读取这些值并正确解析它们,或者我必须将它们序列化为字符串,并在读取它们时手动解析它们?Clojure为java.util.Date
user> (java.util.Date.)
#inst "2014-10-28T19:46:50.183-00:00"
user> (pr-str (java.util.Date.))
"#inst \"2014-10-28T19:47:00.503-00:00\""
user> (read-string (pr-str (java.util.Date.)))
#inst "2014-10-28T19:47:11.626-00:00"
一个选项是在写入文件之前将org.joda.time.DateTime转换为java.util.Date
,然后在读取后再次转换
user> (.toDate (org.joda.time.DateTime.))
#inst "2014-10-28T19:50:34.859-00:00"
user> (org.joda.time.DateTime. (.toDate (org.joda.time.DateTime.)))
#<DateTime 2014-10-28T12:51:09.231-07:00>
user>(.toDate(org.joda.time.DateTime.))
#inst“2014-10-28819:50:34.859-00:00”
用户>(org.joda.time.DateTime.(.toDate(org.joda.time.DateTime.))
#
@noisesmith的回答促使我更详细地研究标签阅读器(谢谢@noisesmith!)。看来他会让我做我想做的事。具体来说,您可以将一个新值绑定到*数据读取器*
,并告诉读取器以任何方式解析该值
在这种情况下,我只想读取测试数据,因此我甚至不需要修改
print方法
和print dup
协议。我只是将数据存储为正常日期(#inst“…”
),并使用带有joda time reader的宏来读取数据。是否需要从日期时间
中保留时间字段?如果你这样做,你的任务会变得更加困难。幸运的是,我们不需要这个。无论如何,它只是一个测试夹具,所以我们可以非常具体地说明我们支持什么和不支持什么。这比仅仅将它们存储为字符串好吗?理想情况下,我希望找到一个不需要预处理/后处理的解决方案(参见我的答案)。
user> (.toDate (org.joda.time.DateTime.))
#inst "2014-10-28T19:50:34.859-00:00"
user> (org.joda.time.DateTime. (.toDate (org.joda.time.DateTime.)))
#<DateTime 2014-10-28T12:51:09.231-07:00>