【发布时间】:2013-02-01 03:36:06
【问题描述】:
我有两个如下所示的字段(注意第一个字段有毫秒部分):
{
"updateTime":"2011-11-02T02:50:12.208Z",
"deliverTime":"1899-12-31T16:00:00Z"
}
我想用 Gson 将 Json 字符串反序列化为一个对象,所以我得到一个 Gson 实例:
GsonBuilder gb = new GsonBuilder();
gb.setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
gson = gb.create();
第一个字段被反序列化为 Java 日期类型:2011-11-02 02:50:12.208(看起来忽略了时区部分 - “Z”,这是我的预期)。但是,第二个字段被反序列化为1900-01-01 00:00:00(我住在中国,这里是+8 GMT),似乎时区部分-'Z'起了作用参与反序列化。
为什么第二个字段使用时区部分?这不是我的预期。
【问题讨论】:
-
对我来说,它无法解析第二个日期字符串 (
java.text.ParseException: Unparseable date: "1899-12-31T16:00:00Z")。您使用的是哪个版本的 Gson? -
为什么将 T 和 Z 用简单的引号 '' 括起来?我没有(gson 1.7.1)
-
只是为了给你更多的反馈,我的模式 MM/dd/yy HH:mm:ss SSSZ 给了我这样的日期:02/20/13 18:03:11 089+0100
-
致克莱门斯,抱歉这么晚才回复。我正在使用 gson 2.2.2。
-
对于 Samuel,结果字符串是在我无法控制其格式的某个地方生成的。我曾试图删除引号,gson 会抛出一个未知字符异常。我想知道的是,如果毫秒字段存在,则转换行为的区别(一个 ingore 时区而另一个不会)。