Apexで日付の曜日を判定する最も簡単な方法


日付が「月曜日」や「金曜日」など、どの曜日に該当するのかを確認する機能は、日付データを操作する際によく必要になります。この記事では、Apexの`Datetime.format()`メソッドを使用した簡単で効果的な曜日の取得方法を紹介します。


`Datetime.format()`を使った曜日の取得方法

`Datetime.format()`メソッドを使うと、日付をさまざまなフォーマットで出力できます。`EEEE`というフォーマット文字列を使用することで、対象の日付の曜日を文字列として取得可能です。


コード例:曜日を取得する

以下のコードは、現在の日付から曜日を取得する基本的な例です。

public class DateUtils {
    // 日付から曜日を取得するメソッド
    public static String getDayOfWeek(Date date) {
        // DateをDatetimeに変換し、フォーマットで曜日を取得
        Datetime datetime = (Datetime)date;
        return datetime.format('EEEE', 'ja'); // 'ja'を指定して日本語の曜日を取得
    }
}

// 使用例
Date today = System.today(); // 本日の日付
String dayOfWeek = DateUtils.getDayOfWeek(today);
System.debug('今日の日付: ' + today + ' は ' + dayOfWeek);

テストコード例

以下のテストコードは、さまざまな日付で曜日が正しく取得されるかを確認します。

@IsTest
public class DateUtilsTest {
    @IsTest
    public static void testGetDayOfWeek() {
        // 例: 2024年12月16日は月曜日
        Date testDate = Date.newInstance(2024, 12, 16); // 月曜日
        String dayOfWeek = DateUtils.getDayOfWeek(testDate);
        System.assertEquals('月曜日', dayOfWeek);

        // 他の日付のテスト
        System.assertEquals('水曜日', DateUtils.getDayOfWeek(Date.newInstance(2024, 12, 18))); // 水曜日
        System.assertEquals('土曜日', DateUtils.getDayOfWeek(Date.newInstance(2024, 12, 21))); // 土曜日
    }
}

このアプローチのメリット

  1. シンプルで直感的

    • `Datetime.format()`を活用することで、余計な計算を省略し、直接曜日を取得できます。
  2. ロケールに対応可能

    • 第2引数でロケール(例: `'ja'`)を指定することで、日本語や英語など、希望する言語で曜日を取得できます。
  3. メンテナンス性が高い

    • 計算式を利用する方法よりも、可読性が高く、メンテナンスが容易です。

応用例

  1. 営業日の判定

    public static Boolean isWeekday(Date date) {
        String dayOfWeek = getDayOfWeek(date);
        return !dayOfWeek.equals('土曜日') && !dayOfWeek.equals('日曜日');
    }
  2. 曜日ごとのスケジュール管理

    public static void processTaskByDay(Date date) {
        String dayOfWeek = getDayOfWeek(date);
        switch on dayOfWeek {
            when '月曜日' {
                System.debug('週初めのタスクを処理します。');
            }
            when '金曜日' {
                System.debug('週末の準備を開始します。');
            }
            when else {
                System.debug('通常業務を行います。');
            }
        }
    }
    

まとめ

Apexで日付の曜日を取得するには、`Datetime.format()`メソッドを使うのが最も簡単かつ効果的です。この方法は、計算を用いる方法に比べてコードが直感的でわかりやすく、保守性にも優れています。

コメント