我们最近开始在生产环境中遇到一个奇怪的错误(测试环境工作正常)。
java.lang.IllegalArgumentException:非法模式字符'y'
这是由以下代码引起的
SimpleDateFormat dateFormat = (SimpleDateFormat)DateFormat.getDateInstance();
dateFormat.applyLocalizedPattern("yyyy-MM-dd");
例如,当使用“Y”而不是“y”表示年份时,通常会引发此错误。正如您在上面看到的,这里不是这种情况。我不是 100% 确定服务器上设置的语言环境。Linux env LANG 设置为“de_DE.UTF_8”,因此可能会使用它。
输入 SimpleDateFormat.java 的源代码,我找到了方法translatePattern(String pattern, String from, String to)
。pattern
当from 中不存在任何字符时,这会引发提到的异常。在另一台计算机上进行本地调试时,这些值如下所示
模式=“yyyy-MM-dd”
来自=“GyMdkHmsSEDFwWahKzZ”
从服务器上的异常可以看出,第一个 'y' 不存在于from
. from
从 获取formatData.getLocalPatternChars()
,它是DateFormatSymbols
从服务器上的语言环境初始化的。
是否有可用的语言环境可以具有不带“y”的格式?在没有任何代码更改的情况下开始发生此错误,据我所知,没有更改服务器配置。