プログラムでは、日付や時刻を扱う場面がよくあります。
このような処理を行うとき、日付を単なる文字列として管理するだけでは、日付の加算や比較などが難しくなります。
Javaでは、日付や時刻を扱うためのクラスが用意されています。
今回は、Java 8以降で利用できる日付・時刻APIの中から、LocalDate・LocalTime・LocalDateTimeを中心に学習しましょう。
LocalDateは、日付を扱うためのクラスです。
年・月・日の情報を管理できますが、時刻の情報は持ちません。
まずは、現在の日付を取得してみましょう。
import java.time.LocalDate;
public class Main {
public static void main(String[] args) {
LocalDate today = LocalDate.now();
System.out.println(today);
}
}
LocalDate.now()は、実行環境の現在の日付を取得します。
例えば、2026年10月27日に実行した場合、実行結果は次のようになります。
2026-10-27
実行結果は、プログラムを動かした日付によって変わります。
現在の日付だけでなく、特定の日付を指定してLocalDateを作成することもできます。
LocalDate date = LocalDate.of(2026, 12, 25);
System.out.println(date);
2026-12-25
of()では、年・月・日を指定します。
LocalDate.of(年, 月, 日);
日付を指定する際は、実在する日付を指定する必要があります。不正な日付を指定すると、DateTimeExceptionが発生します。
LocalDateから、年・月・日の情報を個別に取り出すこともできます。
LocalDate date = LocalDate.of(2026, 12, 25);
System.out.println(date.getYear());
System.out.println(date.getMonthValue());
System.out.println(date.getDayOfMonth());
2026
12
25
なお、getMonth()を使用すると、月を数値ではなくMonth型の値として取得できます。
LocalTimeは、時刻を扱うためのクラスです。
時・分・秒などの情報を管理できますが、日付の情報は持ちません。
import java.time.LocalTime;
public class Main {
public static void main(String[] args) {
LocalTime now = LocalTime.now();
System.out.println(now);
}
}
LocalTime.now()は、実行環境の現在の時刻を取得します。
時刻は実行したタイミングによって変わるため、実行結果は一定ではありません。
特定の時刻を指定する場合は、of()を使用します。
LocalTime time = LocalTime.of(14, 30);
System.out.println(time);
14:30
LocalTime.of(14, 30)では、14時30分を表す時刻を作成しています。
LocalDateTimeは、日付と時刻の両方を扱うためのクラスです。
import java.time.LocalDateTime;
public class Main {
public static void main(String[] args) {
LocalDateTime now = LocalDateTime.now();
System.out.println(now);
}
}
実行結果の例は次のとおりです。
2026-10-27T14:30:15.123
実際の表示は、実行した日時によって変わります。
日付と時刻を指定して作成することもできます。
LocalDateTime dateTime =
LocalDateTime.of(2026, 12, 25, 14, 30);
System.out.println(dateTime);
2026-12-25T14:30
この例では、2026年12月25日の14時30分を表しています。
何を管理したいのかによって、使うクラスを選びましょう。
LocalDateでは、日付を加算・減算することができます。
LocalDate date = LocalDate.of(2026, 12, 25);
System.out.println(date.plusDays(7));
System.out.println(date.minusDays(7));
2027-01-01
2026-12-18
月や年を加算・減算するメソッドもあります。
date.plusMonths(1);
date.minusMonths(1);
date.plusYears(1);
date.minusYears(1);
例えば、予約日の1週間後や、契約日の1年後などを計算する場合に利用できます。
なお、LocalDateは不変オブジェクトです。plusDays()などを呼び出しても、元の日付が直接変更されるわけではありません。結果を変数に保存する場合は、戻り値を受け取ります。
LocalDate nextWeek = date.plusDays(7);
2つの日付を比較するには、isBefore()やisAfter()などのメソッドを利用できます。
LocalDate date1 = LocalDate.of(2026, 10, 1);
LocalDate date2 = LocalDate.of(2026, 12, 1);
System.out.println(date1.isBefore(date2));
System.out.println(date1.isAfter(date2));
System.out.println(date1.isEqual(date2));
true
false
false
イベントの日付が今日より前か、期限が過ぎているかなどを判定する場合に利用できます。
日付を扱う場合、標準の「2026-12-25」という形式ではなく、「2026年12月25日」のように表示したいことがあります。
そのような場合は、DateTimeFormatterを利用します。
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
public class Main {
public static void main(String[] args) {
LocalDate date = LocalDate.of(2026, 12, 25);
DateTimeFormatter formatter =
DateTimeFormatter.ofPattern("yyyy年MM月dd日");
System.out.println(date.format(formatter));
}
}
2026年12月25日
ofPattern()では、表示したい形式を指定します。
例えば、日付と時刻を表示する場合は、次のように指定できます。
DateTimeFormatter formatter =
DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
なお、MMは月、mmは分を表します。大文字と小文字を間違えないようにしましょう。
LocalDateは日付のみ、LocalTimeは時刻のみを扱います。両方必要な場合はLocalDateTimeを利用します。
LocalDateは不変オブジェクトなので、計算結果を利用したい場合は戻り値を受け取ります。
DateTimeFormatterでは、MMが月、mmが分です。書式の大文字・小文字に注意しましょう。
日付の加算や比較を行いたい場合は、文字列ではなくLocalDateなどの日付型を利用すると便利です。
日付・時刻APIを利用すると、予約管理や期限管理など、実際の業務でも必要となる処理を作りやすくなります。
次回は、Javaでファイルを読み書きするファイル操作について学習します。