web-dev-qa-db-ja.com

Javaで、システムのデフォルトロケール(言語)で曜日の文字列(Sun、Mon、...、Sat)を取得する方法

最も簡単な方法:

String[] namesOfDays = new String[7] {
    "Sun", "MON", "TUE", "WED", "THU", "FRI", "SAT"
};

このメソッドはロケールを使用しません。したがって、システムの言語が英語でない場合、この方法は正しく機能しません。

Joda時間を使用すると、次のようにできます。

String[] namesOfDays = new String[7];
LocalDate now = new LocalDate();

for (int i=0; i<7; i++) {
    /* DateTimeConstants.MONDAY = 1, TUESDAY = 2, ..., SUNDAY = 7 */
    namesOfDays[i] = now.withDayOfWeek((DateTimeConstants.SUNDAY + i - 1) % 7 + 1)
        .dayOfWeek().getAsShortText();
}

ただし、この方法では、今日の日付とカレンダーの計算を使用しますが、これらは最終目的には使用できません。また、少し複雑です。

システムのデフォルトロケールで"Sun""Mon"、...、"Sat"などの文字列を取得する簡単な方法はありますか?

26
Naetmul

私があなたを誤解していないなら

 calendar.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.SHORT, Locale.US);

あなたが探しているものです。 ここ ドキュメントを見つけることができます、

または、 getShortWeekdays() を使用することもできます

String[] namesOfDays = DateFormatSymbols.getInstance().getShortWeekdays()
49
Blackbelt
Date now = new Date();
// EEE gives short day names, EEEE would be full length.
SimpleDateFormat dateFormat = new SimpleDateFormat("EEE", Locale.US); 
String asWeek = dateFormat.format(now);

希望する日時で日付を作成できます。そして、あなたが望むものを達成します。

11
Juned Ahsan

tl; dr

DayOfWeek.MONDAY.getDisplayName( 
    TextStyle.SHORT , 
    Locale.getDefault() 
)

Java.time

Joda-Time プロジェクトは、現在 メンテナンスモード であり、 Java.time クラスへの移行を推奨しています。 Java.timeの多くは、Android(下記参照)にバックポートされています。

DayOfWeek

DayOfWeek enumは、曜日ごとに1つずつ、7つのオブジェクトを定義します。このクラスには、ローカライズされた曜日名の文字列を生成するgetDisplayNameなどの便利なメソッドがいくつか用意されています。

ローカライズするには、次を指定します。

  • TextStyle は、文字列の長さまたは短縮を決定します。
  • Locale (a)曜日名、月名などの翻訳のための人間の言語、および(b)略語、大文字、句読点の問題を決定する文化規範、セパレーターなど。

例:

String output = DayOfWeek.MONDAY.getDisplayName( TextStyle.SHORT , Locale.CANADA_FRENCH );

指定する代わりに、JVMの現在のデフォルトのタイムゾーンを使用できます。ただし、リスクに留意してください。デフォルトゾーンは、いつでも変更できます実行中は、JVM内で実行されているアプリのスレッドのコードによって変更できます。

Locale locale = Locale.getDefault() ;
String output = DayOfWeek.MONDAY.getDisplayName( TextStyle.SHORT , locale );

Java.timeについて

Java.time フレームワークはJava 8以降に組み込まれています。これらのクラスは、面倒な古い legacy のような日時クラスに取って代わります- Java.util.DateCalendar 、& SimpleDateFormat

Joda-Time プロジェクトは、現在 メンテナンスモード であり、 Java.time クラスへの移行を推奨しています。

詳細については、 Oracle Tutorial を参照してください。また、Stack Overflowで多くの例と説明を検索してください。指定は JSR 31 です。

Java.timeクラスはどこで入手できますか?

4
Basil Bourque

1.8がなければ、 DateFormatSymbols を使用できます(Androidでも動作します)。

DateFormatSymbols.getWeekdays()

戻り値:曜日の文字列。 Calendar.SUNDAY、Calendar.MONDAYなどを使用して、結果の配列にインデックスを付けます。

0
yincrash