千家信息网

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

发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,本篇文章给大家分享的是有关msf4j微服务框架中ParseException: Unparsable date: "2019-01-01 00:00:00"异常怎么处理,小编觉得挺实用的,因此分享给大
千家信息网最后更新 2025年12月02日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_CNzh_CN这里,其中,enzh表示的是系统语言,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在查找系统语言的过程中找到除了中文语言之外的其他语言,造成转换失败的异常

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

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

语言 系统 中文 输出 问题 实例 模式 代码 国家 就是 中国 英文 英语 框架 处理 服务 名称 接口 方法 时候 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 举办网络安全普法教育讲座 数据库管理工程师第三版和第四版 国三网络技术大级考 管理远程的服务器软件 嵌入式平台服务器 注册mysql数据库怎么改字 网页能打开游戏连接不到服务器 软件开发价值何在 全国高校网络安全联赛总决赛 服务器显示的字体怎么调整 数据库原理及应用第2版实验 西安现代化安全文化展厅软件开发 深圳1u服务器散热器供应商 软件开发公司中台 河北超频服务器技术指导 省市县三级联动 数据库 打开数据库的文稿 计算机数据库的安全性 王牌战争里面哪个服务器零件最多 厦门五更网络技术有限公司怎么样 徽师网络安全教育工作会 云译客数据库 网络安全信息道德文字 网络安全审查工作开展情况 自考数据库及其应用电子版教程 部队加强网络安全意识 数据库dbf文件修复 数据库提示正在恢复中 深圳青禾农业互联网科技 pdms版本数据库不兼容
0