Java : 現在の曜日(DayOfWeek)を取得
Java で曜日を表すクラス(列挙型)は DayOfWeek です。
本記事では、現在の曜日(DayOfWeek) を取得する方法をご紹介します。
現在の曜日を取得
曜日を表す列挙型の DayOfWeek には、列挙型定数として
- MONDAY (月曜日)
- TUESDAY (火曜日)
- ...
- SUNDAY (日曜日)
が用意されています。
final var weeks = DayOfWeek.values();
// [MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY]
System.out.println(Arrays.toString(weeks));
まずは、現在の日付を取得してみましょう。
もし、デフォルトのタイムゾーンでよければ、LocalDate の now メソッドを使います。
// 日本のデフォルト・タイムゾーンは Asia/Tokyo(JST) です。
final var zoneId = ZoneId.systemDefault();
System.out.println(zoneId); // Asia/Tokyo
// 現在時刻 2023/5/10 (水曜日) に実行した結果です。
final var localDate = LocalDate.now();
System.out.println(localDate); // 2023-05-10
次に、LocalDate の getDayOfWeek を使い、曜日を取得します。
final var dayOfWeek = localDate.getDayOfWeek();
System.out.println(dayOfWeek); // WEDNESDAY
無事に、現在の曜日である水曜日(WEDNESDAY) が取得できました。
曜日を日本語で表示したい場合は、DayOfWeek の getDisplayName を使います。
もしくは 書式文字列 でも可能です。
// デフォルトのロケール(日本語)で表示します。
final var locale = Locale.getDefault();
System.out.println(locale); // ja_JP
System.out.println(dayOfWeek.getDisplayName(TextStyle.FULL, locale)); // 水曜日
System.out.println(dayOfWeek.getDisplayName(TextStyle.SHORT, locale)); // 水
// 書式文字列の例です。
System.out.printf("今日は %tA です。%n", dayOfWeek); // 今日は 水曜日 です。
DayOfWeek は列挙型なので、条件分岐させたい場合は switch式 が便利です。
final var dayOfWeek = LocalDate.now().getDayOfWeek();
System.out.println(dayOfWeek); // WEDNESDAY
final var ret = switch (dayOfWeek) {
case MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY -> "今日は平日!";
case SATURDAY, SUNDAY -> "今日は休日!";
};
System.out.println(ret); // 今日は平日!
指定した日付の曜日を取得
現在の曜日ではなく、指定した日付の曜日を取得したいこともあるかと思います。
その場合は、LocalDate を now ではなく、of で生成します。
// 1999/1/1 (金曜日) の LocalDate を生成します。
final var localDate = LocalDate.of(1999, 1, 1);
System.out.println(localDate); // 1999-01-01
final var dayOfWeek = localDate.getDayOfWeek();
System.out.println(dayOfWeek); // FRIDAY
System.out.println(dayOfWeek.getDisplayName(TextStyle.FULL, Locale.getDefault())); // 金曜日
1999/1/1 は金曜日ということが取得できました。
LocalDate 以外にも、例えば タイムゾーン つきの日時である ZonedDateTime でも同じです。
final var zonedDateTime = ZonedDateTime.of(2000, 1, 1, 0, 0, 0, 0, ZoneId.of("Asia/Tokyo"));
System.out.println(zonedDateTime); // 2000-01-01T00:00+09:00[Asia/Tokyo]
final var dayOfWeek = zonedDateTime.getDayOfWeek();
System.out.println(dayOfWeek); // SATURDAY
System.out.println(dayOfWeek.getDisplayName(TextStyle.FULL, Locale.getDefault())); // 土曜日
まとめ
簡単にですが、現在の曜日を取得する方法を解説いたしました。
基本的には、日付関連のクラス
のオブジェクトが取得できれば、getDayOfWeek メソッドを使い曜日を取得できます。
関連記事
- 列挙型(enum)の基本
- 書式文字列の一覧
- switch文ではなくswitch式を使おう
- 日付・時刻の基本
- Date, CalendarではなくLocalDateTime, ZonedDateTimeを使おう
- 文字列と日付・時刻の変換
- 日付と時刻、曜日の計算
- 現在時刻(日時)の取得いろいろ
- ZoneIdとZoneOffsetの違い
- API 使用例
- Calendar (カレンダー)
- ChronoLocalDate
- ChronoLocalDateTime
- ChronoZonedDateTime
- Clock (時計)
- Date (日付・時刻)
- DateTimeException (日付・時刻の例外)
- DateTimeParseException (日付・時刻の解析例外)
- DayOfWeek (曜日)
- Duration (時間の量)
- Era (紀元)
- Instant (時点)
- InstantSource
- JapaneseDate (和暦を使った日付)
- LocalDate (日付・タイムゾーンなし)
- LocalDateTime (日時・タイムゾーンなし)
- LocalTime (時刻・タイムゾーンなし)
- Month (月)
- MonthDay (月・日)
- OffsetDateTime (日時・オフセットあり)
- OffsetTime (時刻・オフセットあり)
- Period (日付の量)
- Temporal
- TemporalAccessor
- TemporalAdjuster (日付・時刻の調整)
- TemporalAdjusters (日付・時刻の調整ユーティリティ)
- TimeZone (タイムゾーン)
- Year (年)
- YearMonth (年・月)
- ZonedDateTime (日時・タイムゾーンあり)
- ZoneId (タイムゾーンID)
- ZoneOffset (タイムゾーン・オフセット)