Java Gson无法正确序列化/反序列化日期

Java Gson无法正确序列化/反序列化日期,java,gson,Java,Gson,奇怪的是,下面的测试用例会失败。有人知道为什么吗 Gson Gson=new GsonBuilder() .setDateFormat(“yyyy-MM-dd hh:MM:ss.SSS”) .create(); 日期=新日期(); 字符串json=gson.toJson(日期); 系统输出打印项次(日期); Date date2=gson.fromJson(json,Date.class); 系统输出打印项次(日期2); 资产质量(日期2,日期); 发生这种情况是因为一些数据丢失,并且默认的ja

奇怪的是,下面的测试用例会失败。有人知道为什么吗

Gson Gson=new GsonBuilder()
.setDateFormat(“yyyy-MM-dd hh:MM:ss.SSS”)
.create();
日期=新日期();
字符串json=gson.toJson(日期);
系统输出打印项次(日期);
Date date2=gson.fromJson(json,Date.class);
系统输出打印项次(日期2);
资产质量(日期2,日期);

发生这种情况是因为一些数据丢失,并且默认的
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();
更新#1 有个打字错误<代码>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")