web-dev-qa-db-ja.com

SimpleDateFormat警告ローカルのフォーマットを取得するには、getDateInstance()、getDateTimeInstance()、またはgetTimeInstance()を使用します。

この警告について心配する必要がありますか?警告を無視するとどうなりますか?
この警告はどういう意味ですか:
ローカルのフォーマットを取得するには、getDateInstance()getDateTimeInstance()、またはgetTimeInstance()を使用するか、new SimpleDateFormat(String template, Locale locale)Locale.US for ASCII日付。
以下のコードの2行目。アプリはコードで正常に動作しています。日付を表示したかった(例:19 Nov 2014)。

public static String getFormattedDate(long calendarTimeInMilliseconds) {
    SimpleDateFormat sdfDate = new SimpleDateFormat("d MMM yyyy");  //ON THIS LINE
    Date now = new Date();
    now.setTime(calendarTimeInMilliseconds);
    String strDate = sdfDate.format(now);
    return strDate;
}

これは here のように日付をフォーマットする正しい方法だと思います。

30
Mohammed Ali

現在 SimpleDateFormat(String) コンストラクターを使用しています。これはデフォルトのロケールを意味します。ロケールのドキュメントに記載されているように、さまざまなシステムで予期しない出力が生成される可能性があるため、 デフォルトのロケールに注意してください です。

代わりに SimpleDateFormat(String、Locale) コンストラクタを使用する必要があります。追加のパラメーター(使用するロケール)を取ります。出力が一貫した方法で機械可読であることを確認したい場合(ユーザーの実際のロケールに関係なく、常に同じに見えます)、 Locale.US を選択できます。マシンの冗長性を気にしない場合は、明示的に Locale.getDefault() を使用するように設定できます。

これらをサンプルコードで使用すると、次のようになります。

// for US
SimpleDateFormat sdfDate = new SimpleDateFormat("d MMM yyyy", Locale.US);

// or for default
SimpleDateFormat sdfDate = new SimpleDateFormat("d MMM yyyy",
        Locale.getDefault());
48
Valter Jansons

これは無視できますが、別の言語を使用しているユーザーに対して日付が予期せず表示される可能性があることを知らせる警告が表示されます。独自のロケールでフォーマットを強制したい場合は、Locale.US(または、フォーマット要件に一致するロケール)。それ以外の場合は、ローカライズされた書式設定のためにいずれかのgetInstance()メソッドを使用します。

3
JstnPwll