原来是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需要设置时间格式才能正常使用,默认的不是标准格式。


目录
相关文章
|
16天前
|
监控 Linux Shell
|
1天前
|
安全 算法 Linux
Linux 服务器还有漏洞?建议使用 OpenVAS 日常检查!
在数字化时代,Linux 服务器的安全至关重要。OpenVAS 是一款优秀的开源漏洞扫描工具,可以帮助及时发现并修复服务器中的安全隐患。本文将介绍 OpenVAS 的主要功能、使用方法及应对漏洞的措施,帮助用户加强服务器安全管理,确保企业数字化安全。
12 7
|
4天前
|
监控 Ubuntu Linux
使用VSCode通过SSH远程登录阿里云Linux服务器异常崩溃
通过 VSCode 的 Remote - SSH 插件远程连接阿里云 Ubuntu 22 服务器时,会因高 CPU 使用率导致连接断开。经排查发现,VSCode 连接根目录 ".." 时会频繁调用"rg"(ripgrep)进行文件搜索,导致 CPU 负载过高。解决方法是将连接目录改为"root"(或其他具体的路径),避免不必要的文件检索,从而恢复正常连接。
|
7天前
|
缓存 Unix Linux
服务器linux!!!
本文介绍了计算机的演变历史、硬件基础知识及服务器相关知识。从电子管时代的ENIAC到冯-诺伊曼架构,再到现代计算机系统组成,详细讲解了计算机的发展历程。此外,文章还介绍了服务器的分类、品牌、硬件组成以及IDC机房的上架流程,为读者提供了全面的技术背景知识。
23 0
服务器linux!!!
|
8天前
|
人工智能 安全 Linux
|
11天前
|
Linux 数据库
Linux服务如何实现服务器重启后的服务延迟自启动?
【10月更文挑战第25天】Linux服务如何实现服务器重启后的服务延迟自启动?
65 3
|
14天前
|
存储 安全 关系型数据库
Linux系统在服务器领域的应用与优势###
本文深入探讨了Linux操作系统在服务器领域的广泛应用及其显著优势。通过分析其开源性、安全性、稳定性和高效性,揭示了为何Linux成为众多企业和开发者的首选服务器操作系统。文章还列举了Linux在服务器管理、性能优化和社区支持等方面的具体优势,为读者提供了全面而深入的理解。 ###
|
17天前
|
关系型数据库 MySQL Linux
基于阿里云服务器Linux系统安装Docker完整图文教程(附部署开源项目)
基于阿里云服务器Linux系统安装Docker完整图文教程(附部署开源项目)
153 2
|
9天前
|
Linux
Linux 修改服务器时间
【10月更文挑战第27天】Linux 修改服务器时间
23 0
|
11天前
|
缓存 监控 Linux
Python 实时获取Linux服务器信息
Python 实时获取Linux服务器信息
下一篇
无影云桌面