下面的测试用例会失败,这很奇怪。谁知道为什么?
Gson gson = new GsonBuilder()
.setDateFormat("yyyy-MM-dd hh:mm:ss.SSS")
.create();
Date date = new Date();
String json = gson.toJson(date);
System.out.println(date);
Date date2 = gson.fromJson(json, Date.class);
System.out.println(date2);
assertEquals(date2, date);
答案 0 :(得分:3)
这是因为某些数据丢失而且默认的java.util.Date
构造函数对毫秒敏感,但默认的Gson日期/时间格式配置(您可能正在使用它)忽略毫秒。只需比较以确保:
System.out.println(date.getTime());
System.out.println(date2.getTime());
默认的Gson日期/时间序列化程序(不是反序列化程序)格式为DateTimeAdapter.enUsFormat
(从Gson 2.8.0开始),不包括迄今为止的JSON表示的毫秒数。要克服这种情况,您只需要定义一个尊重所有时间值的模式,包括毫秒:
private static final Gson gson = new GsonBuilder()
.setDateFormat("yyyy-MM-dd hh:mm:ss.SSS")
.create();
有一个错字。 yyyy-MM-dd hh:mm:ss.SSS
的工作时间为00:00至11:59,但是从12:00到23:59失败。我早上测试过,所以我没注意到我错了。 :)更准确的格式是yyyy-MM-dd HH:mm:ss.SSS
- HH
表示范围为00..23的小时:
.setDateFormat("yyyy-MM-dd HH:mm:ss.SSS")