我們最近在生產環境中出現了一個奇怪的錯誤(測試環境工作正常)。java dateformat非法模式字符'y'
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中的任何字符時提到的異常。在不同的計算機上本地調試從=「GyMdkHmsSEDFwWahKzZ」
從服務器上的例外
圖案=「YYYY-MM-DD」
時的值如下所示,很明顯的是,第一「Y '在from
中不存在。 from
取自formatData.getLocalPatternChars()
,這是從服務器上的語言環境初始化的DateFormatSymbols
。
是否還有語言環境可用,可能沒有'y'格式?這個錯誤已經開始發生,沒有任何代碼改變,並從我的知識沒有改變服務器配置。
您正在運行的精確JVM是什麼? –
java.vm.specification.vendor:Sun Microsystems Inc. java.runtime.version:1.6.0_37-b06 –
它與測試中運行的相同嗎? –