原来是Gson导致,本地和linux服务器不同的环境导致Date转换出现问题:Invalid time zone indicator ‘ ‘
创始人
2024-05-09 18:59:20
0

背景是这样,迭代之前的代码,在mac本地自测完全没有问题,自测流畅完成,然后就部署到服务器上去了,结果,还真就出问题了!!!

目录

  • 问题
  • 解决
    • 解决方法
    • 其他问题的解决方法
  • 原因

问题

先看报错日志

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

相关内容

热门资讯

民生政策 落地有声丨智慧养老新...   近年来,我国大力发展养老服务事业,加快建设中国特色养老服务体系,“养老”变“享老”的温暖图景正在...
政策助力、制度创新……感受长三...   央视网消息:上海作为我国重点打造的国际科创中心,正带动着长三角三省一市掀起科技创新热潮。随着协同...
“公交+文旅”沉浸式打卡城市风...   央视网消息:暑期畅游如何高效打卡热门景点?面对持续升温的文旅市场,不少城市优化了公共交通服务,推...
权威数读|上半年经济形势,国家...   发展“含金量”不断提高,全国统一大市场建设取得积极成效,消费增速加快、亮点增多、环境更优……国家...
非遗正青春|“谐巴谐玛” 千年...   在班公湖畔  藏北羌塘的劲风中  回荡着千年战舞的铿锵  这便是西藏自治区级非物质文化遗产“谐巴...
中国为何被这位联合国官员频频“...   近日,联合国项目事务厅执行主任达席尔瓦接受总台《高端访谈》独家专访。  在采访中,达席尔瓦频繁“...
经济政策一线微观察|场景升级 ...   霓虹闪烁的重庆街头,啤酒麦芽的香气和火锅的麻辣味在空气中弥漫。日前,多场各具特色的夜间主题活动同...
2024年中国结婚610.6万... 为提高结婚率,发钱、延长婚假、放宽要求,成为各地常态 文|《财经》记者 王静仪 编辑|王延春 202...
挺进失联村,把洪灾现场情况带出...   “8月1日上午,河北兴隆县六道河镇前往朱家沟村的进村道路终于打通……”看到这条新闻时,在救灾一线...
​业财税一体化的真正含义是什么 业财税一体化的真正含义是什么业财税一体化强调企业各部门间的信息共享与协同工作。业务部门负责开展日常经...