java.util.Date正在使用1912年之前的日期解析错误的日期

我不明白 Jackson 库在 1912 年之前解析错误日期的原因。我想问题是java.util.Date 转换,因为 Gson 仍然存在问题。

这是我的代码:

ObjectMapper mapper = new ObjectMapper();
String tmp = "{"date":"1911-01-01T00:00:00+00:00"}";
        
Response resp = mapper.readValue(tmp, Response.class);
System.out.println("Date->"+resp.date);

日期是 java.util.Date 类型的字段

如您所见,输入是: 1911-01-01T00:00:00+00:00

输出是:(Sun Jan 01 00:09:21 CET 1911我不明白为什么要设置那个时间)

但是如果我设置这个输入: 1912-01-01T00:00:00+00:00

输出是正确的: Mon Jan 01 00:00:00 CET 1912

仅发生在 1912 年之前的日期。

JDK v1.8.0_101

谢谢。

回答

时间

永远不要使用遗留类Date。不要浪费你的时间试图了解烂摊子是DateCalendar

仅使用现代java.time类。Jackson 的更高版本支持java.time

OffsetDateTime odt = OffsetDateTime.parse( "1911-01-01T00:00:00+00:00" ) ;

当要求生成表示其值的文本时,会OffsetDateTime生成:

odt.toString(): 1911-01-01T00:00Z

Z对端装置的一个的零小时-分钟-秒UTC的偏移量,并且被读作“祖鲁”。


有关使用遗留类的代码发生了什么的解释,请参阅Ole VV的优秀回答但请注意,在java.time中使用设计合理的类避免了潜在问题:应用没有被调用的时区。

时区是特定地区人民使用的偏移量的过去、现在和未来变化的历史记录。您的输入带有偏移量(零),没有时区指示。因此在处理您的输入时无需涉及时区。


以上是java.util.Date正在使用1912年之前的日期解析错误的日期的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>