首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在gson生成器中添加格式日期后的时间错误

在gson生成器中添加格式日期后的时间错误
EN

Stack Overflow用户
提问于 2016-07-20 13:24:12
回答 1查看 1.8K关注 0票数 1

我有json字符串,它从mongodb返回。

代码语言:javascript
运行
复制
[{"_id":"578bb51aa51d15940688809e","name":"aaa","date":"2016-07-20T11:47:39.302Z"}]

我使用gson来转换Java对象。我找到Unparseable date: "2016-07-20T11:47:39.302Z"了。因此,我向gson构建器添加了日期格式。

代码语言:javascript
运行
复制
Gson gson=  new GsonBuilder().setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").create();

日期结果是Wed Jul 20 11:47:39 MMT 2016。时间是incorrect

日期字符串的更好的日期格式模式是什么?

如何通过给定的日期字符串选择合适的日期格式模式?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-20 14:45:25

如果我没有弄错,你的时区信息有问题。JavaScript Date对象和Date对象都表示https://www.wikiwand.com/en/Coordinated_Universal_Time (UTC)中的一个点。JavaScript Date对象和Date对象都不包含时区信息。

侧注: Date对象实际上包含时区信息,这就是为什么在调用date.toString()时会看到时区(在您的情况下是MMT)。尽管如此,这个时区应该被忽略,因为时区异常突出了Java7日期/时间类的一些许多问题

GsonBuilder().setDateFormat()方法设置Date对象应该序列化和反序列化的字符串格式。此格式也不包含任何时区信息,因为Date对象不包含该信息。

为了在正确的时区中显示Date对象表示的UTC时间,必须提供该时区。这不是在使用Gson反序列化期间完成的,而是在实际显示日期/时间时完成的:

代码语言:javascript
运行
复制
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
simpleDateFormat.setTimeZone(TimeZone.getDefault());

String zonedDateTime = simpleDateFormat.format(date);

Android还附带了一个方便的DateUtils类,而不是SimpleDateFormat,它将为您处理时区信息以及Locale信息。

代码语言:javascript
运行
复制
DateUtils.formatDateTime(getContext(), date.getTime(),
                        DateUtils.FORMAT_NUMERIC_DATE | DateUtils.FORMAT_ABBREV_ALL);
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38482577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档