カテゴリ: Javaの例外処理 更新日: 2025/12/16

Javaで特定の曜日を取得する方法!過去や未来の日付も簡単操作

368
Java の過去や未来の特定の曜日を取得する方法

先生と生徒の会話形式で理解しよう

生徒

「Javaで来週の金曜日や、先週の月曜日みたいに、特定の曜日を取得することってできますか?」

先生

「もちろんできますよ。JavaのTemporalAdjustersクラスを使えば、過去や未来の任意の曜日を簡単に取得できます。」

生徒

「曜日を指定して日付を取れるなんて便利ですね!どんな風に使うんですか?」

先生

「それでは、実際にLocalDateTemporalAdjustersの使い方を見ながら解説していきましょう。」

1. Javaで曜日を取得する基本の考え方

1. Javaで曜日を取得する基本の考え方
1. Javaで曜日を取得する基本の考え方

Javaでは、日付操作にLocalDateクラスやDayOfWeek列挙型、そしてTemporalAdjustersユーティリティを組み合わせて使うことで、「次の金曜日」や「前の月曜日」といった特定の曜日の日付を取得できます。

日付・曜日操作は、スケジュール管理・予約システム・カレンダーアプリなどの開発でよく使われる機能です。

2. 今週・来週の特定の曜日を取得する方法

2. 今週・来週の特定の曜日を取得する方法
2. 今週・来週の特定の曜日を取得する方法

現在の日付から「次の月曜日」や「次の金曜日」を取得するには、TemporalAdjusters.next()を使います。JavaのDayOfWeek列挙型と組み合わせて記述します。


import java.time.LocalDate;
import java.time.DayOfWeek;
import java.time.temporal.TemporalAdjusters;

public class NextWeekdayExample {
    public static void main(String[] args) {
        LocalDate today = LocalDate.now();
        LocalDate nextMonday = today.with(TemporalAdjusters.next(DayOfWeek.MONDAY));
        LocalDate nextFriday = today.with(TemporalAdjusters.next(DayOfWeek.FRIDAY));

        System.out.println("次の月曜日: " + nextMonday);
        System.out.println("次の金曜日: " + nextFriday);
    }
}

次の月曜日: 2025-09-08
次の金曜日: 2025-09-05

上記のように、with(TemporalAdjusters.next(...))で「次に来る指定の曜日」が取得できます。

3. 過去の曜日(前の月曜・金曜など)を取得する方法

3. 過去の曜日(前の月曜・金曜など)を取得する方法
3. 過去の曜日(前の月曜・金曜など)を取得する方法

過去の曜日を取得したい場合は、TemporalAdjusters.previous()を使います。これは「直前の指定曜日」を返してくれます。


import java.time.LocalDate;
import java.time.DayOfWeek;
import java.time.temporal.TemporalAdjusters;

public class PreviousWeekdayExample {
    public static void main(String[] args) {
        LocalDate today = LocalDate.now();
        LocalDate lastMonday = today.with(TemporalAdjusters.previous(DayOfWeek.MONDAY));
        LocalDate lastFriday = today.with(TemporalAdjusters.previous(DayOfWeek.FRIDAY));

        System.out.println("前の月曜日: " + lastMonday);
        System.out.println("前の金曜日: " + lastFriday);
    }
}

前の月曜日: 2025-09-01
前の金曜日: 2025-08-29

TemporalAdjusters.previous()を使うことで、過去の特定の曜日に簡単にさかのぼることができます。

Javaをこれから始める人や、 オブジェクト指向の考え方を基礎から理解したい人には、 定番の入門書がこちらです。

スッキリわかるJava入門 第4版をAmazonで見る

※ Amazon広告リンク

4. 同じ曜日を含めたいときは「orSame」系を使う

4. 同じ曜日を含めたいときは「orSame」系を使う
4. 同じ曜日を含めたいときは「orSame」系を使う

現在が金曜日だった場合に「次の金曜日」を取得すると、1週間後の金曜日になります。もし「今日が金曜日ならそれを使いたい」と思うなら、nextOrSame()previousOrSame()を使います。


LocalDate today = LocalDate.now();
LocalDate thisOrNextFriday = today.with(TemporalAdjusters.nextOrSame(DayOfWeek.FRIDAY));
LocalDate thisOrLastMonday = today.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));

orSameを使うことで、「今日がその曜日なら今日、それ以外なら次(または前)」という柔軟な制御が可能になります。

5. 毎週特定の曜日の繰り返し処理をしたい場合

5. 毎週特定の曜日の繰り返し処理をしたい場合
5. 毎週特定の曜日の繰り返し処理をしたい場合

たとえば、今週から4週間にわたって毎週火曜日の処理を行いたいときは、ループとplusWeeks()を組み合わせます。


LocalDate firstTuesday = LocalDate.now().with(TemporalAdjusters.nextOrSame(DayOfWeek.TUESDAY));

for (int i = 0; i < 4; i++) {
    LocalDate targetDate = firstTuesday.plusWeeks(i);
    System.out.println("対象日: " + targetDate);
}

対象日: 2025-09-02
対象日: 2025-09-09
対象日: 2025-09-16
対象日: 2025-09-23

このように繰り返し処理にも応用できます。plusWeeks()を使えば週単位での繰り返しも簡単です。

6. 特定の月の最初や最後の指定曜日を取得したいとき

6. 特定の月の最初や最後の指定曜日を取得したいとき
6. 特定の月の最初や最後の指定曜日を取得したいとき

月初の金曜日や、月末の火曜日を取得したい場合はTemporalAdjusters.firstInMonth()lastInMonth()を使います。


LocalDate now = LocalDate.now();
LocalDate firstFriday = now.with(TemporalAdjusters.firstInMonth(DayOfWeek.FRIDAY));
LocalDate lastTuesday = now.with(TemporalAdjusters.lastInMonth(DayOfWeek.TUESDAY));

System.out.println("月初の金曜日: " + firstFriday);
System.out.println("月末の火曜日: " + lastTuesday);

月初の金曜日: 2025-09-05
月末の火曜日: 2025-09-30

月単位のスケジュールを作成する際に非常に役立つ方法です。

7. DayOfWeek列挙型の使い方と注意点

7. DayOfWeek列挙型の使い方と注意点
7. DayOfWeek列挙型の使い方と注意点

DayOfWeekは、曜日を表す列挙型(enum)で、MONDAYSUNDAYまでが用意されています。

大文字で指定する必要があるため、間違えて"monday"などと書かないように注意しましょう。


DayOfWeek day = DayOfWeek.MONDAY;
System.out.println(day); // MONDAY

フォームやユーザー入力から文字列で受け取った場合にはDayOfWeek.valueOf()で変換します。

8. TemporalAdjustersが使える他の便利な操作

8. TemporalAdjustersが使える他の便利な操作
8. TemporalAdjustersが使える他の便利な操作

TemporalAdjustersには他にも以下のような便利なメソッドがあります:

  • firstDayOfMonth():月初の日付
  • lastDayOfMonth():月末の日付
  • firstDayOfNextMonth():次の月の初日
  • firstInMonth(DayOfWeek):月の最初の指定曜日

これらを組み合わせることで、柔軟な日付操作が可能になります。Javaでカレンダーを扱う場面では、こうした日付調整処理は非常に重宝されます。

Javaの例外処理の一覧へ
新着記事
FlutterのMVP・MVVMアーキテクチャの違いと使い分け
FlutterのMVP・MVVMアーキテクチャの違いと使い分けを初心者向けに解説!
オニオンアーキテクチャの基本とFlutterでの適用例
オニオンアーキテクチャの基本とFlutterでの適用例を初心者向けに解説
クリーンアーキテクチャとは?Flutterでの導入メリット
クリーンアーキテクチャとは?Flutterでの導入メリットをやさしく解説
【AWS】RDS for Oracleの特徴・できないこと・バージョン・料金まとめ
【AWS】RDS for Oracleの特徴・できないこと・バージョン・料金を初心者向けに徹底解説
人気記事
インスタンスタイプの料金比較と最適な選び方(最新2025年版)
AWSのインスタンスタイプの料金比較と最適な選び方【2025年最新版】
【AWS】VPCの料金体系まとめ!無料枠・通信費・各種サービスごとの料金を徹底解説
【AWS】VPCの料金体系まとめ!無料枠・通信費・各種サービスごとの料金を徹底解説
【AWS】VPCエンドポイントとは?種類・使い方・S3連携まで完全解説
【AWS】VPCエンドポイントとは?種類・使い方・S3連携まで完全解説
【AWS】s3 cpコマンド完全ガイド!基本・recursive・exclude/includeも解説
【AWS】s3 cpコマンド完全ガイド!基本・recursive・exclude/includeも解説

🔌 USBポート不足を解消

Type-C 1本で拡張。
開発・作業環境を一気に快適に

UGREEN USB-Cハブを見る

※ Amazon広告リンク