Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Datetime Clojure:序列化和解析文件的日期/时间?_Datetime_Clojure_Jodatime_Clj Time - Fatal编程技术网

Datetime 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

我想将一些测试数据存储到一个文件中,并在测试中再次读取它。数据是Clojure映射的序列,其中一个属性是
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>