千家信息网

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

发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,本篇文章给大家分享的是有关msf4j微服务框架中ParseException: Unparsable date: "2019-01-01 00:00:00"异常怎么处理,小编觉得挺实用的,因此分享给大
千家信息网最后更新 2025年01月23日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安全错误 数据库的锁怎样保障安全 个人服务器被攻击机房停服务 数据库简述需求分析的步骤 怎样从其他表格内提取数据库 中信银行软件开发中心社招 人工智能网络安全神器 多媒体服务器搭建软件 网络安全策略一般包括 ssh连接服务器端口填多少 同程旅游网络技术有限公司 数据库分表 用户名 数据库采样周期ms 东西湖区 网络安全产业港 信息网络技术关于小学科学的 数据库导入文件数据类型不对 福州四起网络技术有限公司 长春常见的ipfs服务器 湖南郴州学电脑软件开发招生 数据库应用技术培训内容 阜阳颍泉区网络安全 有关网络安全是什么的作文 数据库系统基础第六版 中文 往服务器上面copy东西很慢 关于网络安全手抄报的短句 硬盘怎么合并保留数据库 安徽网络技术转让活动简介 惠普服务器如何用万兆网口 甘肃专业网络技术服务优势 云数据库软件哪个好用 株洲软件开发培训课 吉林省鑫泽网络技术有限公司捐款
0