我似乎无法让 gson 在 java 中将日期转换为 UTC 时间……这是我的代码……
Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").create();
//This is the format I want, which according to the ISO8601 standard - Z specifies UTC - 'Zulu' time
Date now=new Date();
System.out.println(now);
System.out.println(now.getTimezoneOffset());
System.out.println(gson.toJson(now));
这是我的输出
Thu Sep 25 18:21:42 BST 2014 // Time now - in British Summer Time
-60 // As expected : offset is 1hour from UTC
"2014-09-25T18:21:42.026Z" // Uhhhh this is not UTC ??? Its still BST !!
我想要的 gson 结果和我所期待的
"2014-09-25T17:21:42.026Z"
我可以清楚地在调用 toJson 之前减去 1 小时,但这似乎是一个 hack。如何将 gson 配置为始终转换为 UTC?
原文由 Marky0 发布,翻译遵循 CC BY-SA 4.0 许可协议
经过进一步研究,这似乎是一个已知问题。 gson 默认序列化程序始终默认为您的本地时区,并且不允许您指定时区。请参阅以下链接……
https://code.google.com/p/google-gson/issues/detail?id=281
解决方案是创建自定义 gson 类型适配器,如链接中所示:
然后按如下方式注册:
现在可以正确输出 UTC 日期
感谢链接作者。