最近、運用環境で奇妙なエラーが発生しました(テスト環境はうまく動作します)。java dateformat不正なパターン文字 'y'
java.lang.IllegalArgumentExceptionが:無効なパターン文字「Y」
これは、例えば代わりにY」の「Y」を使用する場合、このエラーは、通常、スローされ、次のコード
SimpleDateFormat dateFormat = (SimpleDateFormat)DateFormat.getDateInstance();
dateFormat.applyLocalizedPattern("yyyy-MM-dd");
によって引き起こされます' 年間。上記のように、ここには該当しません。私は、サーバー上に設定されているロケールを100%確信しているわけではありません。 Linuxのenv LANGは "de_DE.UTF_8"に設定されているので、おそらくこれが使用されています。
SimpleDateFormat.javaのソースコードを入力すると、translatePattern(String pattern, String from, String to)
というメソッドが見つかりました。これは、pattern
のいずれかの文字がから存在しないときに言及された例外をスローします。別のコンピュータ上でローカル=「GyMdkHmsSEDFwWahKzZ」サーバー上の例外から
から=「YYYY-MM-DD」
パターンをデバッグするときの値が、それは明らかである。このようになります。その第一は「y 'はfrom
に存在しません。 from
はformatData.getLocalPatternChars()
からフェッチされます。DateFormatSymbols
はサーバーのロケールから初期化されています。
「y」のないフォーマットを使用できるロケールもありますか?このエラーは、コード変更なしで発生し始めました。私の知るところでは、サーバー設定の変更はありません。 SimpleDateFormatのJavadocのから
実行中の正確なJVMとは何ですか? –
java.vm.specification.vendor:Sun Microsystems Inc. java.runtime.version:1.6.0_37-b06 –
これはtestで実行しているものと同じですか? –