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 枚举类来控制逻辑。
- 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 数组属性和方法
- CentOS环境下安装PHPUnit的方法分析
- Centos下安装Ansible的示例代码
- ubuntu18.04安装搜狗拼音的简易教程
- linux中$符号的基础用法总结
- Linux下的 mariadb 使用 root 用户启动方式(推荐)
- window与linux项目部署之linux文件路径不存在问题
- Ubuntu 18.04安装 pyenv、pyenv-virtualenv、virtualenv、Numpy、SciPy、Pillow、Matplotlib
- Linux使用 iftop 实时监控网卡的流量
- Centos中TCPWrappers访问控制实现
- CentOS7 重新分配分区大小的实现方法
- Linux 下安装pip包的方法
- Linux系统设置PATH环境变量(3种方法)
- leetcode栈之有效的括号
- linux系统安装iso文件方法
- xshell 远程登陆CentOS7 免密登陆的思路详解