【发布时间】:2019-11-11 22:34:40
【问题描述】:
序列化 ZonedDateTime 时出错(它根本没有出现在输出 xml 中):
java.lang.InstantiationException: java.time.ZonedDateTime
继续...
java.lang.RuntimeException:评估失败:=Class.new();
继续...
我有一个类的实例,其中一个字段属于 ZonedDateTime 类型。 当我尝试使用 XMLEncoder 序列化对象时:
import java.beans.XMLEncoder;
我收到此错误。在输出文件中,除了 ZonedDateTime 字段之外,所有其他字段都会出现
这个带有 ZonedDateTime 的字段看起来像这样,例如:
ZonedDateTime date = ZonedDateTime.parse("2010-01-10T00:00:00Z[CET]");
有没有办法将其转换为可以使用的日期格式? 例如
ZonedDateTime.parse("2010-01-10T00:00:00").toLocalDateTime().atZone(ZoneId.of("CET")
上面的写法(用.toLocalDateTime())可能没有任何意义,但这只是一个例子。
我实际上是在序列化这些对象的整个列表,所以错误出现了很多次(并且总是在 xml 文件中没有输出)
【问题讨论】:
-
"2010-01-10T00:00:00"不是ZonedDateTime。它没有时区,因此您必须直接将其解析为LocalDateTime。 -
为什么不
LocalDateTime.parse(yourString).atZone(ZoneId.of("CET"))? -
在序列化或反序列化过程中是否出现错误?您的错误表明它无法使用它的构造函数实例化 ZonedDateTime(这是正确的 - 它需要调用
parse方法,并且您可能需要某种类型的适配器用于 XML 解析器)。但您不会在 ser 序列化期间收到该错误,因为它不需要在序列化期间创建实例。 -
@ErwinBolwidt 我在尝试序列化时遇到了这个问题(即从程序写入 output.xml 文件)。
-
@AndyTurner 所以你的意思是这样的: ZonedDateTime date = LocalDateTime.parse(DateInString).atZone(ZoneId.of("CET")) ?我想我已经尝试过了,但会再试一次
标签: java hibernate serialization xmlencoder