千家信息网

msf4j微服务框架中ParseException: Unparsable date: "2019-01-01 00:00:00"异常怎么处理

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,本篇文章给大家分享的是有关msf4j微服务框架中ParseException: Unparsable date: "2019-01-01 00:00:00"异常怎么处理,小编觉得挺实用的,因此分享给大
千家信息网最后更新 2026年10月31日msf4j微服务框架中ParseException: Unparsable date: "2019-01-01 00:00:00"异常怎么处理

本篇文章给大家分享的是有关msf4j微服务框架中ParseException: Unparsable date: "2019-01-01 00:00:00"异常怎么处理,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

最近遇到一个问题,前端接口在往后端接口传值的时候,时间字符串(比如:2019-01-01 00:00:00)转 timestamp 出错了,导致接口调用失败,同样的代码,在windows上运行是OK的,但是到linux或者mac上就会出现异常,初步怀疑是Windows和linux/Mac的时区不一致导致的,于是在mac和Linux上输出系统语言和系统区域,结果都是中文:

说明系统语言设置是没问题的,于是接着使用debug模式一步一步找到异常的地方,终于发现了问题出现在这里:

根据msf4j的源代码所呈现时间转换逻辑:

  1. 在类 DateTypeAdapter中,声明了3个用于转换的DateFormat 实例,分别是:

  • enUsFormat 美国语言

  • localFormat 本地语言

  • iso8601Format iso8601标准

  1. 接下来调用转换方法private synchronized Date deserializeToDate(String json)将string转换为Date对象,完成转换

不过很不幸的是,在linux 和 mac中,全都转换失败,只有在windows下才会转换成功,通过在debug模式下查找,发现原因在创建DateFormat实例的时候DateFormat.getDateTimeInstance(),mac模式下获取到的locale是en_CN:

windows模式下获取到的locale是zh_CN:

所以问题就在en_CN和zh_CN这里,其中,en和zh表示的是系统语言,en表示英语(一般指美国英语),zh表示中文,CN表示国家-中国,换个方式看可能更好理解:

        Locale locale = Locale.getDefault();        System.out.println(locale.getLanguage());//输出系统语言代码        System.out.println(locale.getCountry());//输出系统国家代码        System.out.println(locale.getDisplayLanguage());//输出系统语言名称        System.out.println(locale.getDisplayCountry());//输出系统国家名称

输出结果为:

不过即使输出为中文和中国,但是也还有可能出错,因为在实例 DateFormat localFormat = DateFormat.getDateTimeInstance(2, 2) 创建的过程中,并不需要指定locale,该方法会去使用一个系统默认语言Local.Category.Format:

public final static DateFormat getDateTimeInstance(int dateStyle,                                                       int timeStyle)    {        return get(timeStyle, dateStyle, 3, Locale.getDefault(Locale.Category.FORMAT));    }

这时候如果mac系统中的语言是中文加上英文,像这样:

Locale.Category.Format获取到的language就会是en,所以就变成了en_CN(英文_中国),然后转换就是失败了

所以解决办法就是在创建DateFormat实例之前,给jvm设置Locale.setDefault(Locale.CHINA),这样就避免了jvm在查找系统语言的过程中找到除了中文语言之外的其他语言,造成转换失败的异常

当然,如果把英文删除,只保留中文,则不用设置Locale为CHINA也没问题了,所以linux 上也是如此,在系统语言中,设置了不止一个中文语言,还包括英语,虽然第一语言是中文。

以上就是msf4j微服务框架中ParseException: Unparsable date: "2019-01-01 00:00:00"异常怎么处理,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。

语言 系统 中文 输出 问题 实例 模式 代码 国家 就是 中国 英文 英语 框架 处理 服务 名称 接口 方法 时候 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广东万易互联网科技有限公司惠州分公司 互联网和科技技术 A股互联网金融科技公司 疫情对互联网科技公司影响 互联网未来科技 安徽鑫晟辉互联网科技 友谊互联网络科技 互联网科技网站 中国互联网金融科技基金 四个字互联网科技公司取名 互联网公司会议桌创意科技软装饰 广州慧亚互联网科技怎么样 湖南诚度互联网科技有限公司 南平创想时代互联网科技有限公司 移动互联网科技公司 辽宁互联网新科技 合肥互联网科技公司公章图片 广州有谷有贝互联网科技有限公司 互联网科技博主张洲 互联网科技企业文化 互联网新科技 广州大一互联网络科技有限公司 互联网与科技金融数据 远拓互联网科技 互联网金融 科技创新 宁夏众和广鑫互联网科技有限公司 恒生互联网科技指数跳水 互联网科技大赛获奖感言 南博望互联网科技有限公司 众安科技工业互联网合作
0