Failed to parse date ["1534467411000"]:Invalid time zone indicator '0'
时间:2022-07-25
本文章向大家介绍Failed to parse date ["1534467411000"]:Invalid time zone indicator '0',主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
背景
使用google 的gson 从外部redis反序列化一个 TimeStamp 的字段的对象时候,报错。
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 枚举类来控制逻辑。
- 100个Numpy练习【4】
- Golang语言中Path包用法
- 100个Numpy练习【5】
- Golang中container/list包中的坑
- 关于Golang语言数组索引的有趣现象
- 使用SQL来分析数据库参数(二)(r10笔记第82天)
- Golang不定参数
- [go语言]利用缓冲信道来实现网游帐号验证消息的分发和等待
- 转--Golang语言版 ssh口令破解工具
- cubieboard(树莓派)安装Ubuntu+Apache+PHP+Mysql
- Oracle 12c里的几点补充(一)(r11笔记第7天)
- Oracle备库的PDB无法连接的问题(r11笔记第6天)
- Golang语言社区--模板的使用
- Golang语言写Web 应用程序
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 解决数独问题用人工智能还是量子计算?
- Leetcode 39. 组合总和(dfs)
- 短视频APP制作,设置高斯模糊
- 使用 Sunny-Ngrok 将内网程序发布到外网
- Leetcode 17. 电话号码的字母组合 (dfs)
- Java实现md5和base64加密解密的示例代码
- Spring 基于 XML 的 AOP
- SpringBoot 集成 Apache Camel FTP 实现文件同步
- Spring 基于 XML 的 IOC
- 初识 Spring
- Leetcode 55. 跳跃游戏 (贪心)
- SpringBoot 报 No operations allowed after connection closed 异常解决办法
- Leetcode 15 三数之和(双指针,去重)
- 洛谷 P1886 滑动窗口 /【模板】单调队列 (单调队列、线段树、RMQ(ST表))
- SpringBoot 整合 JMSTemplate