前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Failed to parse date ["1534467411000"]:Invalid time zone indicator '0'

Failed to parse date ["1534467411000"]:Invalid time zone indicator '0'

作者头像
MickyInvQ
发布2020-09-27 10:35:22
2.1K0
发布2020-09-27 10:35:22
举报
文章被收录于专栏:InvQ的专栏
背景

使用google 的gson 从外部redis反序列化一个 TimeStamp 的字段的对象时候,报错。

代码语言:javascript
复制
Caused by: com.google.gson.JsonSyntaxException: 1534467411000
        at com.google.gson.internal.bind.DateTypeAdapter.deserializeToDate(DateTypeAdapter.java:74)
        at com.google.gson.internal.bind.DateTypeAdapter.read(DateTypeAdapter.java:59)
        at com.google.gson.internal.bind.DateTypeAdapter.read(DateTypeAdapter.java:41)
        at com.google.gson.internal.bind.TypeAdapters$26$1.read(TypeAdapters.java:598)
        at com.google.gson.internal.bind.TypeAdapters$26$1.read(TypeAdapters.java:596)
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:129)
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:220)
        at com.google.gson.Gson.fromJson(Gson.java:887)
        at com.google.gson.Gson.fromJson(Gson.java:852)
        at com.google.gson.Gson.fromJson(Gson.java:801)
        at com.google.gson.Gson.fromJson(Gson.java:773)
        Caused by: java.text.ParseException: Failed to parse date ["1534467411000']: Invalid time zone indicator '0'
        at com.google.gson.internal.bind.util.ISO8601Utils.parse(ISO8601Utils.java:274)
        at com.google.gson.internal.bind.DateTypeAdapter.deserializeToDate(DateTypeAdapter.java:72)
        ... 19 more
Caused by: java.lang.IndexOutOfBoundsException: Invalid time zone indicator '6'
        at com.google.gson.internal.bind.util.ISO8601Utils.parse(ISO8601Utils.java:245)
        ... 20 more

根据字面意思,是说time zone 时区符号 0 不合理(经过观察其他数据,发现排在第九位的0)

分析

代码执行到这里,有一个time类型的字段,然后,gson的日期适配器出场

在这里插入图片描述
在这里插入图片描述

找到这个要反序列化的字段

在这里插入图片描述
在这里插入图片描述

(随机截图,不是文中举的例子) 从下面这个就可以看出,解析的有问题,显然这个感觉年月日都有问题

在这里插入图片描述
在这里插入图片描述

所以将,此时间戳拿到网上去看了下,

在这里插入图片描述
在这里插入图片描述

发现果然,不对 然后将单位转化为毫秒,如下

在这里插入图片描述
在这里插入图片描述

之后问了那边这个时间戳字段是毫秒的还是秒的,果然如上。

再看下为啥gson不解析到毫秒呢??

发现这个if语句为false,下面的逻辑便不执行了

在这里插入图片描述
在这里插入图片描述

为什么为false呢

在这里插入图片描述
在这里插入图片描述

第9位(index=8) 不等于 ‘T’,也就是没设置时区,那么we are done!

继续找时区

第9位是否是‘Z’,不是!

在这里插入图片描述
在这里插入图片描述

仍然不是!~

在这里插入图片描述
在这里插入图片描述

至此,出现了我们堆栈报错的最面上,也就是找不到时区的indicator。

在这里插入图片描述
在这里插入图片描述
如何解决

换用jackson反序列化 为什么这个可以?

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

这个方法实现不同,而且有一个jsonToken 枚举类来控制逻辑。

在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/11/12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • 分析
  • 如何解决
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档