記事内にはプロモーションが含まれています

【Java】曜日を取得する方法!LocalDateやCalendarクラスの使い方

【Java】曜日を取得する方法!LocalDateやCalendarクラスの使い方 Java

Javaでアプリケーションを開発していると、「現在の曜日を表示したい」「特定の日付が何曜日か判定したい」という場面によく遭遇します。

カレンダーアプリやスケジュール管理システムはもちろん、ログの出力やバッチ処理の実行判定など、曜日の取得は非常に基本的ながら重要な処理の一つです。

しかし、Javaには歴史的な経緯から日時を扱うクラスが複数存在します。
LocalDate」「Calendar」「Date」など、どれを使えば良いのか迷ってしまうこともあるでしょう。

この記事では、Javaで曜日を取得するための主要な方法について、最新の標準APIであるDate and Time API(java.timeパッケージ)を中心に、従来のCalendarクラスを使った方法まで、サンプルコード付きで詳しく解説します。

【本記事の信頼性】
プロフィール
執筆者:マヒロ
  • 執筆者は元エンジニア
  • SES⇒大手の社内SE⇒独立
  • 現在はこじんまりとしたプログラミングスクールを運営
  • モットーは「利他の精神」

Java 8以降のスタンダード:LocalDateを使った曜日の取得

現在、Javaで日付や時刻を扱う場合、Java 8で導入された「Date and Time API」を使用することが強く推奨されています。

その中でも LocalDate クラスは、日付(年、月、日)を扱うための基本的なクラスであり、曜日の取得も非常に直感的に行えます。

getDayOfWeekメソッドで曜日を取得する

LocalDate クラスの getDayOfWeek() メソッドを使用すると、曜日を表す DayOfWeek 列挙型(Enum)を取得できます。

これは単なる数値ではなく、曜日そのものを表すオブジェクトです。

import java.time.LocalDate;
import java.time.DayOfWeek;

public class LocalDateExample {
    public static void main(String[] args) {
        // 現在の日付を取得
        LocalDate today = LocalDate.now();

        // 曜日(DayOfWeek)を取得
        DayOfWeek dayOfWeek = today.getDayOfWeek();

        System.out.println("今日の日付: " + today);
        System.out.println("今日の曜日(英語): " + dayOfWeek);
    }
}

実行結果の例は以下の通りです。

今日の日付: 2024-05-20
今日の曜日(英語): MONDAY

このように、非常にシンプルなコードで曜日を取得できます。

取得された DayOfWeek オブジェクトは、そのまま出力すると英語の大文字(MONDAY, TUESDAY…)で表示されます。

曜日を数値で取得する方法(getValue)

データベースへの保存や条件分岐などで、曜日を「1(月曜)」や「7(日曜)」といった数値で扱いたい場合もあります。

その際は、DayOfWeek クラスの getValue() メソッドを使用します。

import java.time.LocalDate;
import java.time.DayOfWeek;

public class DayOfWeekValueExample {
    public static void main(String[] args) {
        LocalDate date = LocalDate.now();
        DayOfWeek dayOfWeek = date.getDayOfWeek();

        // 曜日を数値(1=月曜, ..., 7=日曜)で取得
        int dayValue = dayOfWeek.getValue();

        System.out.println("曜日の数値: " + dayValue);

        if (dayValue == 6 || dayValue == 7) {
            System.out.println("今日は週末です。");
        } else {
            System.out.println("今日は平日です。");
        }
    }
}

実行結果は以下の通りです。

曜日の数値: 1
今日は平日です。

java.time パッケージでは、月曜日が「1」、日曜日が「7」と定義されています。
これはISO-8601標準に準拠しています。

曜日を日本語で表示する方法(DateTimeFormatter)

ユーザーの画面に表示する場合など、「月曜日」「月」といった日本語表記が必要になることが多いはずです。

DateTimeFormatter クラスを使用することで、簡単にローカライズされた文字列に変換できます。

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public class JapaneseDayOfWeekExample {
    public static void main(String[] args) {
        LocalDate date = LocalDate.now();

        // "E" は曜日(短縮形:月、火...)を表すパターン文字
        // Locale.JAPANESE を指定して日本語化
        DateTimeFormatter formatterShort = DateTimeFormatter.ofPattern("E", Locale.JAPANESE);
        
        // "EEEE" は曜日(完全形:月曜日、火曜日...)を表す
        DateTimeFormatter formatterFull = DateTimeFormatter.ofPattern("EEEE", Locale.JAPANESE);

        System.out.println("曜日(短縮): " + date.format(formatterShort));
        System.out.println("曜日(完全): " + date.format(formatterFull));
    }
}

実行結果は以下の通りです。

曜日(短縮): 月
曜日(完全): 月曜日

自前で「月曜日」「火曜日」といった文字列の配列を用意する必要がなく、非常にスマートに実装可能です。

従来の定番:Calendarクラスを使った曜日の取得

Java 7以前から存在するシステムや、古いライブラリを使用しているプロジェクトでは、java.util.Calendar クラスを使用する機会がまだあります。

Calendar クラスは少し扱いが複雑なため、定数の意味を正しく理解しておく必要があります。

Calendar.DAY_OF_WEEKで数値を取得

Calendar クラスでは、get(Calendar.DAY_OF_WEEK) メソッドを使って曜日を「整数」として取得します。

import java.util.Calendar;

public class CalendarExample {
    public static void main(String[] args) {
        // 現在の日時を持つCalendarインスタンスを取得
        Calendar calendar = Calendar.getInstance();

        // 曜日を表す数値を取得
        int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);

        System.out.println("曜日の数値: " + dayOfWeek);
        
        // Calendarクラスの定数と比較
        if (dayOfWeek == Calendar.SUNDAY) {
            System.out.println("今日は日曜日です。");
        }
    }
}

実行結果は以下の通りです。

曜日の数値: 2

ここで注意が必要なのは、戻り値の数値と曜日の対応関係です。

Calendar クラスでは、日曜日が「1」、月曜日が「2」、…、土曜日が「7」 と定義されています。

LocalDate とは異なり、日曜日始まりである点に気をつけましょう。

配列を使って日本語の曜日に変換する

Calendar クラス自体にはフォーマット機能がないため、日本語の曜日を表示したい場合は、文字列の配列を用意してインデックスで参照する方法が一般的です。

import java.util.Calendar;

public class CalendarJapaneseExample {
    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance();
        int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);

        // 曜日の文字列配列(インデックス0はダミー、あるいは1始まりを考慮して調整)
        // Calendar.SUNDAY は 1 なので、配列のインデックス1に "日" を配置
        String[] weekDays = {"", "日", "月", "火", "水", "木", "金", "土"};

        // 取得した数値をそのままインデックスとして使用
        String dayName = weekDays[dayOfWeek];

        System.out.println("今日の曜日: " + dayName + "曜日");
    }
}

実行結果は以下の通りです。

今日の曜日: 月曜日

配列の先頭に空文字などを入れてインデックスをずらすことで、Calendar が返す「1〜7」の数値をそのまま使えるようにするテクニックがよく使われます。

DateクラスとSimpleDateFormatを使った方法

java.util.Date クラスは、日付と時刻を保持するクラスですが、それ自体には曜日を判定する便利なメソッドはありません。

しかし、SimpleDateFormat クラスと組み合わせることで、曜日を含んだ文字列へフォーマットすることが可能です。

Eパターン文字でフォーマットする

LocalDate の時と同様に、「E」というパターン文字を使用します。

import java.util.Date;
import java.text.SimpleDateFormat;
import java.util.Locale;

public class DateFormatExample {
    public static void main(String[] args) {
        Date date = new Date(); // 現在日時

        // 曜日だけを取得するフォーマッタ
        SimpleDateFormat sdf = new SimpleDateFormat("E", Locale.JAPANESE);

        String dayOfWeek = sdf.format(date);

        System.out.println("現在の曜日: " + dayOfWeek);
    }
}

実行結果は以下の通りです。

現在の曜日: 月

Date クラスを使う場合、多くのメソッドが非推奨となっているため、基本的には表示用(フォーマット用)として割り切って使うか、可能な限り java.time パッケージへの移行を検討することをおすすめします。

実践テクニック:特定の日付の曜日を求める

ここまでは「現在」の曜日を取得してきましたが、実務では「2024年12月31日は何曜日か?」といった特定の日付の曜日を知りたいケースも多々あります。

LocalDate を使えば、任意の日付インスタンスを生成するのも簡単です。

ofメソッドで日付を指定して曜日判定

LocalDate.of(年, 月, 日) メソッドを使って特定の日付オブジェクトを作成し、そこから getDayOfWeek() を呼び出します。

import java.time.LocalDate;
import java.time.DayOfWeek;
import java.time.format.TextStyle;
import java.util.Locale;

public class SpecificDateExample {
    public static void main(String[] args) {
        // 2025年1月1日を指定
        LocalDate newYearDay = LocalDate.of(2025, 1, 1);

        // 曜日を取得
        DayOfWeek dayOfWeek = newYearDay.getDayOfWeek();

        // 日本語名称を取得(TextStyleを使用する方法)
        String dayName = dayOfWeek.getDisplayName(TextStyle.FULL, Locale.JAPANESE);

        System.out.println("2025年1月1日は " + dayName + " です。");
    }
}

実行結果は以下の通りです。

2025年1月1日は 水曜日 です。

getDisplayName メソッドを使うと、フォーマッタを使わずに DayOfWeek オブジェクトから直接ローカライズされた文字列を取得することも可能です。

Javaのスキルを活かして年収を上げる方法

以上、Javaで曜日を取得する方法について解説してきました。

なお、Javaのスキルがある場合には、「転職して年収をアップさせる」「副業で稼ぐ」といった方法を検討するのがおすすめです。

Javaエンジニアの需要は非常に高いため、転職によって数十万円の年収アップはザラで、100万円以上年収が上がることも珍しくありません。

なお、転職によって年収を上げたい場合は、エンジニア専門の転職エージェントサービスを利用するのが最適です。

今すぐ転職する気がなくとも、とりあえず転職エージェントに無料登録しておくだけで、スカウトが届いたり、思わぬ好待遇の求人情報が送られてきたりするというメリットがあります。

併せて、副業案件を獲得できるエージェントにも登録しておくと、空いている時間を活かして稼げるようなJavaの案件を探しやすくなります。

転職エージェントも副業エージェントも、登録・利用は完全無料なので、どんな求人や副業案件があるのか気になる方は、気軽に利用してみるとよいでしょう。