LocalDateクラスを新人エンジニアに解説
こんにちは。ゆうせいです。
今回は、JavaのLocalDateクラスについて解説します!LocalDateは、日付を操作するためのJava 8以降で導入された新しい日時APIの一部で、特に「日付のみ」を扱う場合に便利なクラスです。
LocalDateとは?
LocalDateは、日付(年、月、日)を表すクラスで、時間やタイムゾーンの情報を含まない日付データを扱います。このクラスは不変(immutable)でスレッドセーフなので、安全に使えます。
例えるなら…
LocalDateは「カレンダー」のようなものです。現在の日付、過去の日付、未来の日付を簡単に扱うことができます。
LocalDateの基本的な使い方
1. LocalDateオブジェクトの作成
現在の日付を取得
LocalDate.now()
を使うと、現在の日付を取得できます。
import java.time.LocalDate;
LocalDate today = LocalDate.now();
System.out.println("今日の日付: " + today);
特定の日付を生成
LocalDate.of()
メソッドで指定した日付を生成します。
LocalDate specificDate = LocalDate.of(2025, 1, 1); // 2025年1月1日
System.out.println("指定した日付: " + specificDate);
文字列から日付を生成
LocalDate.parse()
を使うと、文字列を日付に変換できます。
LocalDate parsedDate = LocalDate.parse("2025-01-01");
System.out.println("パースした日付: " + parsedDate);
2. 年月日情報の取得
日付の各要素を簡単に取得できます。
LocalDate today = LocalDate.now();
int year = today.getYear(); // 年を取得
int month = today.getMonthValue(); // 月を数値で取得
int day = today.getDayOfMonth(); // 日を取得
System.out.println("年: " + year);
System.out.println("月: " + month);
System.out.println("日: " + day);
曜日も取得できます。
System.out.println("曜日: " + today.getDayOfWeek()); // 曜日(MONDAY, TUESDAYなど)
3. 日付の操作
LocalDateは日付の計算が非常に簡単です。
日付を加算
LocalDate nextWeek = today.plusWeeks(1); // 1週間後
LocalDate nextMonth = today.plusMonths(1); // 1か月後
LocalDate nextYear = today.plusYears(1); // 1年後
System.out.println("1週間後: " + nextWeek);
System.out.println("1か月後: " + nextMonth);
System.out.println("1年後: " + nextYear);
日付を減算
LocalDate lastWeek = today.minusWeeks(1); // 1週間前
LocalDate lastMonth = today.minusMonths(1); // 1か月前
LocalDate lastYear = today.minusYears(1); // 1年前
System.out.println("1週間前: " + lastWeek);
System.out.println("1か月前: " + lastMonth);
System.out.println("1年前: " + lastYear);
4. 日付の比較
日付の比較にはisBefore()
やisAfter()
, equals()
を使用します。
LocalDate date1 = LocalDate.of(2025, 1, 1);
LocalDate date2 = LocalDate.of(2025, 12, 31);
if (date1.isBefore(date2)) {
System.out.println(date1 + " は " + date2 + " より前の日付です");
}
if (date2.isAfter(date1)) {
System.out.println(date2 + " は " + date1 + " より後の日付です");
}
5. 日付のチェック
うるう年かどうかを判定
if (today.isLeapYear()) {
System.out.println("今年はうるう年です");
} else {
System.out.println("今年はうるう年ではありません");
}
月の日数を取得
int daysInMonth = today.lengthOfMonth();
System.out.println("今月の日数: " + daysInMonth);
年の日数を取得
int daysInYear = today.lengthOfYear();
System.out.println("今年の日数: " + daysInYear);
LocalDateのメリットと注意点
メリット
- 直感的なAPI:日付の加減算や比較が簡単。
- 安全性:不変オブジェクトでスレッドセーフ。
- タイムゾーンを考慮しない:日付のみを扱うのでシンプル。
注意点
- 時刻やタイムゾーンは扱えない:必要なら
LocalDateTime
やZonedDateTime
を使用する。 - フォーマット変更には別クラスが必要:日付を特定の形式で表示するには
DateTimeFormatter
を使う。
実用例
1. 次の給料日を計算
例えば、毎月25日が給料日の場合、今日から次回の給料日を計算:
LocalDate today = LocalDate.now();
LocalDate payday = today.withDayOfMonth(25);
if (today.isAfter(payday)) {
payday = payday.plusMonths(1); // 今月の給料日が過ぎていれば次の月に移動
}
System.out.println("次の給料日: " + payday);
2. 年末までの日数を計算
LocalDate today = LocalDate.now();
LocalDate endOfYear = LocalDate.of(today.getYear(), 12, 31);
long daysUntilEndOfYear = java.time.temporal.ChronoUnit.DAYS.between(today, endOfYear);
System.out.println("年末まであと " + daysUntilEndOfYear + " 日");
3. 日付の文字列フォーマット
日付を特定の形式で表示する場合は、DateTimeFormatter
を使います。
import java.time.format.DateTimeFormatter;
LocalDate today = LocalDate.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日");
String formattedDate = today.format(formatter);
System.out.println("フォーマットされた日付: " + formattedDate);
練習問題
問題:次回の祝日を計算するプログラム
- ユーザーから日付を入力。
- その日付から次の祝日(例えば1月1日)が何日後か計算。
ヒント
LocalDate.parse()
で文字列を日付に変換。ChronoUnit.DAYS.between()
で日数を計算。
まとめと次のステップ
LocalDateは、日付をシンプルかつ直感的に操作するための強力なツールです。従来のDate
やCalendar
に比べ、読みやすく、安全なコードが書けます。次に学ぶと良いテーマは以下の通りです。
- LocalTime:時刻を扱うクラス。
- LocalDateTime:日付と時刻を組み合わせたクラス。
- DateTimeFormatter:日付のフォーマット変換。
ぜひ、プログラムで試してみてください!
セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク
投稿者プロフィール
-
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。
最新の投稿
- 新入社員2025年1月8日新人エンジニアの皆さんに向けて「共有フォルダのマナー」を解説
- 新人エンジニア研修講師2025年1月7日研修講師が道徳的免罪符(moral licensing)に陥らないためにできること
- 新入社員2025年1月7日Windowsユーザーの日常生活や仕事で役立つPythonプログラム30選
- 新入社員2025年1月7日Pythonの入門研修の最後に行う演習の例