1. 概要

この短いチュートリアルでは、Javaの日付から曜日を数値およびテキストとして抽出する方法を説明します。

2. 問題

多くの場合、ビジネスロジックには曜日が必要です。 なんで? 一つには、労働時間とサービスレベルは平日と週末で異なります。 したがって、多くのシステムでは、日を数値として取得する必要があります。 ただし、表示用のテキストとしてその日が必要になる場合もあります。

では、Javaの日付から曜日を抽出するにはどうすればよいでしょうか。

3. java.util.Dateを使用したソリューション

java.util.Date は、Java1.0以降のJava日付クラスです。 Javaバージョン7以下で開始されたコードは、おそらくこのクラスを使用します。

3.1. 数値としての曜日

まず、 java.util.Calendar を使用して、日を数値として抽出します。

public static int getDayNumberOld(Date date) {
    Calendar cal = Calendar.getInstance();
    cal.setTime(date);
    return cal.get(Calendar.DAY_OF_WEEK);
}

結果の番号の範囲は1(日曜日)から7(土曜日)です。 Calendar は、このための定数を定義します: Calendar.SUNDAY Calendar.SATURDAY

3.2. テキストとしての曜日

ここで、その日をtextとして抽出します。 Locale を渡して、言語を決定します。

public static String getDayStringOld(Date date, Locale locale) {
    DateFormat formatter = new SimpleDateFormat("EEEE", locale);
    return formatter.format(date);
}

このは、英語の「Monday」やドイツ語の「Montag」など、お使いの言語で1日を返します。

4. java.time.LocalDateを使用したソリューション

Java 8は日付と時刻の処理をオーバーホールし、日付にjava.time.LocalDateを導入しました。 したがって、 Javaバージョン8以降でのみ実行されるJavaプロジェクトでは、このクラスを使用する必要があります!

4.1. 数値としての曜日

日を数字として抽出するのは簡単です今:

public static int getDayNumberNew(LocalDate date) {
    DayOfWeek day = date.getDayOfWeek();
    return day.getValue();
}

結果の数はまだ1から7の範囲です。 でも今回は[X15X]月曜日が1、日曜日が7 ! 曜日には、独自の列挙型DayOfWeekがあります。 予想どおり、列挙型の値は MONDAY SUNDAYです。

4.2. テキストとしての曜日

ここで、その日を再びテキストとして抽出します。 ロケールも渡します。

public static String getDayStringNew(LocalDate date, Locale locale) {
    DayOfWeek day = date.getDayOfWeek();
    return day.getDisplayName(TextStyle.FULL, locale);
}

java.util.Date と同様に、これは選択した言語で1日を返します。

5. 結論

この記事では、Javaの日付から曜日を抽出しました。 java.util.Datejava.time.LocalDateを使用して数値とテキストの両方を返す方法を確認しました。

いつものように、コードはGitHubから入手できます。