原来是Gson导致,本地和linux服务器不同的环境导致Date转换出现问题:Invalid time zone indicator ‘ ‘

简介: 看到报错日志,第一反应就是,date数据的问题,同时又能发现全是和gson相关结合报错行数的代码,盲猜就是gson对时间处理的问题了于是寻找解决方法

问题



先看报错日志


Caused by: java.text.ParseException: Failed to parse date ["2021-11-01 00:00:00"]: Invalid time zone indicator ' '
  at com.google.gson.internal.bind.util.ISO8601Utils.parse(ISO8601Utils.java:274) ~[gson-2.8.9.jar!/:?]
  at com.google.gson.internal.bind.DateTypeAdapter.deserializeToDate(DateTypeAdapter.java:85) ~[gson-2.8.9.jar!/:?]
  ... 15 more
Caused by: java.lang.IndexOutOfBoundsException: Invalid time zone indicator ' '
  at com.google.gson.internal.bind.util.ISO8601Utils.parse(ISO8601Utils.java:245) ~[gson-2.8.9.jar!/:?]
  at com.google.gson.internal.bind.DateTypeAdapter.deserializeToDate(DateTypeAdapter.java:85) ~[gson-2.8.9.jar!/:?]


看到报错日志,第一反应就是,date数据的问题,同时又能发现全是和gson相关

结合报错行数的代码,盲猜就是gson对时间处理的问题了

于是寻找解决方法


解决



因为我代码中确实使用了gson.fromJson()方法,网上也查到是时间转换的问题

报错的使用方式


Gson gson = new Gson();
gson.fromJson();



解决方法


因为我只需要yyyy-MM-dd时间格式,那么就显示声明gson的时间格式即可


Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd").create();
gson.fromJson();


Gson的issue也有这个解决方案:Invalid time zone indicator ’ ’


其他问题的解决方法


如果你的报错类似如下


com.google.gson.JsonSyntaxException: 1525688551000
java.text.ParseException: Failed to parse date ["1525688551000']: Invalid time zone indicator '5'


那么可能是因为:Gson无法解析位数太长的时间格式

可以尝试用GsonBuilder 注册Date类型解决:


GsonBuilder builder = new GsonBuilder();
builder.registerTypeAdapter(Date.class, new JsonDeserializer<Date>() {
    public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
        return new Date(json.getAsJsonPrimitive().getAsLong());
    }
});
Gson gson = builder.create();


原因



GoogleGson在处理Date格式时有小陷阱,默认处理Date对象的序列化/反序列化是通过一个SimpleDateFormat对象来实现的,通过下面的代码去获取实例:


DateFormat.getDateTimeInstance()


在不同的环境中,这样获取到的SimpleDateFormat的模式字符串会不一样。


例如,我的本地默认模式字符串是:“yyyy-M-d H:mm:ss”


服务器的模式字符串则是:“MMM d, yyyy h:mm:ss a”


这就使得同样的Date对象通过Gson来序列化为JSON后内容不同


所以Gson需要设置时间格式才能正常使用,默认的不是标准格式。


目录
相关文章
|
14天前
|
网络协议 安全 Linux
在IntelliJ IDEA中使用固定公网地址远程SSH连接服务器环境进行开发
在IntelliJ IDEA中使用固定公网地址远程SSH连接服务器环境进行开发
21 2
|
10天前
|
网络协议 Linux
云服务器内部端口占用,9090端口已经存在了,如何关闭,Linux查询端口,查看端口,端口查询,关闭端口写法-netstat -tuln,​fuser -k 3306/tcp​
云服务器内部端口占用,9090端口已经存在了,如何关闭,Linux查询端口,查看端口,端口查询,关闭端口写法-netstat -tuln,​fuser -k 3306/tcp​
|
10天前
|
大数据 Linux 程序员
软件开发常见流程之服务器+Linux部署项目,会用服务器+Linux部署项目资料
软件开发常见流程之服务器+Linux部署项目,会用服务器+Linux部署项目资料
|
11天前
|
负载均衡 Java Linux
黑马头条01,环境搭建,今日头条的介绍,今日头条的功能架构图,技术栈的说明,服务层,nacos(奶靠丝)安装,安装在Linux服务器上环境准备,
黑马头条01,环境搭建,今日头条的介绍,今日头条的功能架构图,技术栈的说明,服务层,nacos(奶靠丝)安装,安装在Linux服务器上环境准备,
|
12天前
|
安全 固态存储 Linux
服务器linux操作系统重装的完整流程-傻瓜式教学
服务器linux操作系统重装的完整流程-傻瓜式教学
|
13天前
|
NoSQL 算法 Linux
【内附完整redis配置文件】linux服务器命令设置redis最大限制内存大小,设置redis内存回收机制,redis有哪些回收机制
【内附完整redis配置文件】linux服务器命令设置redis最大限制内存大小,设置redis内存回收机制,redis有哪些回收机制
15 0
|
5天前
|
存储 关系型数据库 数据库
给阿里云的建议和意见 一个云服务器架构是否可行
摘要(Markdown格式): 在修复阿里云服务器IPv4设置错误时遇到困难,导致服务器远程登录失败及外网访问受阻,耗时三天解决。建议阿里云更新文档,确保设置指导与实际情况一致,例如只需在路由表添加条目关联IPv4。此外,建议优化帮助页面,如采用折叠式设计减少干扰。服务器主要任务是数据分析、存储和分发,文中提出简化服务器框架,消除硬件软件复杂配置,利于初学者和独立开发者快速上手,降低时间成本。该设计旨在减少无用组件,节省资源,同时降低云服务商的人力和支持成本。期望云服务商考虑此类架构创新。目前未知是否有类似产品,期待业界反馈。
214 0
给阿里云的建议和意见 一个云服务器架构是否可行
|
7天前
|
存储 编解码 网络协议
阿里云服务器计算型和通用型四代云服务器实例区别及选择参考
目前阿里云在售的云服务器中,计算型和通用型实例规格都包含了第5代、第6代、第7代和最新第八代倚天云服务器产品,例如计算型实例中有c5、c6、c7、c8y实例,而通用型实例有g5、g6、g7、g8y等实例,有的新手用户并不清楚这四代产品之间的差别,本文为大家展示这四代云服务器实例在规格、CPU(核)、内存(G)、计算、存储、内存以及不同配置的指标数据等方面为大家做个对比,让大家了解一下他们之间的不同,以供参考和选择。
阿里云服务器计算型和通用型四代云服务器实例区别及选择参考
|
3天前
|
弹性计算 运维 安全
阿里云ecs使用体验
整了台服务器部署项目上线
|
4天前
|
弹性计算
阿里云ECS的使用心得
本文主要讲述了我是如何了解到ECS,使用ECS的一些经验,以及自己的感悟心得