いくつかのSimpleDateFormatコードを理解しようとしています。特に、私はSimpleDateFormatでローカライズされたパターン文字列を使用しようとしています。 javadoc:SimpleDateFormatローカライズされたパターンで不正なパターン文字エラー
SimpleDateFormatは、ローカライズされた日付と時刻のパターン文字列もサポートしています。これらの文字列では、上記のパターン文字を他のロケール依存のパターン文字に置き換えることができます。
またSimpleDateFormat(String pattern, DateFormatSymbols formatSymbols)
コンストラクタを指定:
は、指定されたパターンと日付フォーマット記号を使ってSimpleDateFormatを構築します。
getLocalPatternChars()
インスタンスが期待されるパターン文字を提示しているが
しかし、SimpleDateFormatののコンストラクタは、これらの文字を含むパターンを拒否されています
public void run() {
Locale loc = new Locale("de", "de");
DateFormatSymbols dfs = new DateFormatSymbols(loc);
String sym = dfs.getLocalPatternChars();
System.out.println(sym);
SimpleDateFormat datefmt = new SimpleDateFormat("tt.MM.uuuu", dfs);
}
は出力を生成します。
GuMtkHmsSEDFwWahKzZ
Exception in thread "main" java.lang.IllegalArgumentException: Illegal pattern character 't'
at java.text.SimpleDateFormat.compile(SimpleDateFormat.java:845)
...
私があれば、同じ出力を得ます私は最後の行を "... new SimpleDateFormat("tt.MM.uuuu", loc);
"に置き換えます。
一方、Anglicizedパターン文字列を使用してSimpleDateFormatインスタンスを作成し、 "applyLocalizedPattern("tt.MM.uuuu")
"を呼び出すと、ローカライズされたパターンが受け入れられます。
したがって、SimpleDateFormatのコンストラクタではローカライズされたパターン文字列を使用できないため、この2段階の初期化が必要です。これは意図的な行動ですか?
コンストラクタは 'translatePattern'(' applyLocalizedPattern')を呼び出さないので、これはバグかコンストラクタの使用法を明確に説明していない悪いJavaDocです。 – Tom
@Tomが正しいです。コンストラクターのpatternパラメーターは、非ローカライズされた日時パターン文字のみを参照します。 –
も参照してくださいhttp://stackoverflow.com/a/24128930/2491410 –