【发布时间】:2023-04-04 14:25:01
【问题描述】:
我不明白 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
谢谢。
【问题讨论】:
-
我不打算花时间调查这个,因为正如 Basil Bourque 的回答所说,你应该切换到 java.time 包而不是使用旧的 java.util.Date 类 - 但是 - “我想问题出在 java.util.Date 转换”——一般来说,你不应该假设错误出现在完善的库或包中;这几乎总是软件包用户的误解或错误。在彻底调查自己的代码之前,不要责怪包。 1912 年是民国历中的一个重要日期,也是明治时代的结束,因此可以考虑。
-
您的默认时区是哪个?欧洲/马德里?欧洲/巴黎?还有什么?
-
输出正确。过去发生了一些奇怪的时区变化。我知道有一个现有的 Stack Overflow 问题涵盖了这个……