
Java8からのjava.timeパッケージで、あの日時操作の悩みを解決!もうDateクラスに苦しむ必要はありません。
Javaの新しい日時API:java.timeパッケージとは?
Java 8から導入されたjava.time
パッケージは、従来の日時API (java.util.Date
, java.util.Calendar
) の問題点を解消し、より直感的で使いやすい日時操作を提供します。この記事では、java.time
パッケージの基本的な使い方から、日付、時刻、期間の操作まで、具体的なコード例を交えながら解説します。
java.time
パッケージの主な特徴は以下の通りです。
– 不変性 (Immutable): 日時オブジェクトは一度作成されると変更できません。これにより、スレッドセーフなプログラミングが容易になります。
– 明確なAPI: 各クラスの役割が明確で、直感的に操作できます。
– ISO 8601準拠: 国際標準規格に準拠しており、異なるシステム間でのデータ交換が容易です。
– 多様なクラス: 日付、時刻、期間、タイムゾーンなど、様々な日時関連のクラスが用意されています。
日付の操作:LocalDate
LocalDate
クラスは、日付(年、月、日)を表します。LocalDate
オブジェクトの生成、日付の取得、日付の計算などの基本的な操作を見ていきましょう。
LocalDateオブジェクトの生成
LocalDate
オブジェクトは、now()
メソッド、of()
メソッドなどを使って生成できます。
import java.time.LocalDate;
public class LocalDateExample {
public static void main(String[] args) {
// 現在の日付を取得
LocalDate today = LocalDate.now();
System.out.println("今日の日付: " + today);
// 特定の日付を指定
LocalDate specificDate = LocalDate.of(2024, 1, 1);
System.out.println("特定の日付: " + specificDate);
// 文字列から日付をパース
LocalDate parsedDate = LocalDate.parse("2024-07-20");
System.out.println("パースされた日付: " + parsedDate);
}
}
日付の取得
LocalDate
オブジェクトから、年、月、日などの情報を取得できます。
LocalDate today = LocalDate.now();
int year = today.getYear();
int month = today.getMonthValue();
int day = today.getDayOfMonth();
System.out.println("年: " + year + ", 月: " + month + ", 日: " + day);
日付の計算
plusDays()
, minusDays()
, plusWeeks()
, minusWeeks()
, plusMonths()
, minusMonths()
, plusYears()
, minusYears()
などのメソッドを使って、日付を計算できます。
LocalDate today = LocalDate.now();
LocalDate tomorrow = today.plusDays(1);
LocalDate yesterday = today.minusDays(1);
System.out.println("明日: " + tomorrow);
System.out.println("昨日: " + yesterday);
日付の比較
isBefore()
, isAfter()
, isEqual()
などのメソッドを使って、日付を比較できます。
LocalDate date1 = LocalDate.of(2024, 1, 1);
LocalDate date2 = LocalDate.of(2024, 1, 2);
System.out.println("date1 is before date2: " + date1.isBefore(date2));
System.out.println("date1 is after date2: " + date1.isAfter(date2));
System.out.println("date1 is equal to date2: " + date1.isEqual(date2));
時刻の操作:LocalTime
LocalTime
クラスは、時刻(時、分、秒、ナノ秒)を表します。LocalTime
オブジェクトの生成、時刻の取得、時刻の計算などの基本的な操作を見ていきましょう。
LocalTimeオブジェクトの生成
LocalTime
オブジェクトは、now()
メソッド、of()
メソッドなどを使って生成できます。
import java.time.LocalTime;
public class LocalTimeExample {
public static void main(String[] args) {
// 現在の時刻を取得
LocalTime now = LocalTime.now();
System.out.println("現在の時刻: " + now);
// 特定の時刻を指定
LocalTime specificTime = LocalTime.of(10, 30, 0);
System.out.println("特定の時刻: " + specificTime);
// 文字列から時刻をパース
LocalTime parsedTime = LocalTime.parse("15:45:30");
System.out.println("パースされた時刻: " + parsedTime);
}
}
時刻の取得
LocalTime
オブジェクトから、時、分、秒などの情報を取得できます。
LocalTime now = LocalTime.now();
int hour = now.getHour();
int minute = now.getMinute();
int second = now.getSecond();
System.out.println("時: " + hour + ", 分: " + minute + ", 秒: " + second);
時刻の計算
plusHours()
, minusHours()
, plusMinutes()
, minusMinutes()
, plusSeconds()
, minusSeconds()
などのメソッドを使って、時刻を計算できます。
LocalTime now = LocalTime.now();
LocalTime later = now.plusHours(2);
LocalTime earlier = now.minusMinutes(30);
System.out.println("2時間後: " + later);
System.out.println("30分前: " + earlier);
時刻の比較
isBefore()
, isAfter()
, isEqual()
などのメソッドを使って、時刻を比較できます。
LocalTime time1 = LocalTime.of(10, 0, 0);
LocalTime time2 = LocalTime.of(10, 30, 0);
System.out.println("time1 is before time2: " + time1.isBefore(time2));
System.out.println("time1 is after time2: " + time1.isAfter(time2));
System.out.println("time1 is equal to time2: " + time1.isEqual(time2));
日付と時刻の組み合わせ:LocalDateTime
LocalDateTime
クラスは、日付と時刻を組み合わせたものを表します。LocalDateTime
オブジェクトの生成、日付と時刻の取得、日付と時刻の計算などの基本的な操作を見ていきましょう。
import java.time.LocalDateTime;
public class LocalDateTimeExample {
public static void main(String[] args) {
// 現在の日時を取得
LocalDateTime now = LocalDateTime.now();
System.out.println("現在の日時: " + now);
// 特定の日時を指定
LocalDateTime specificDateTime = LocalDateTime.of(2024, 1, 1, 10, 30, 0);
System.out.println("特定の日時: " + specificDateTime);
// LocalDateとLocalTimeからLocalDateTimeを生成
LocalDate date = LocalDate.of(2024, 7, 20);
LocalTime time = LocalTime.of(15, 45, 30);
LocalDateTime combinedDateTime = LocalDateTime.of(date, time);
System.out.println("結合された日時: " + combinedDateTime);
}
}
期間の表現:PeriodとDuration
Period
クラスは、日付ベースの期間(年、月、日)を表し、Duration
クラスは、時間ベースの期間(秒、ナノ秒)を表します。これらのクラスを使うことで、期間の計算や表現が容易になります。
Period
import java.time.LocalDate;
import java.time.Period;
public class PeriodExample {
public static void main(String[] args) {
LocalDate startDate = LocalDate.of(2023, 1, 1);
LocalDate endDate = LocalDate.of(2024, 1, 1);
// 期間を計算
Period period = Period.between(startDate, endDate);
System.out.println("期間: " + period.getYears() + "年, " + period.getMonths() + "ヶ月, " + period.getDays() + "日");
}
}
Duration
import java.time.Duration;
import java.time.LocalTime;
public class DurationExample {
public static void main(String[] args) {
LocalTime startTime = LocalTime.of(10, 0, 0);
LocalTime endTime = LocalTime.of(12, 30, 0);
// 期間を計算
Duration duration = Duration.between(startTime, endTime);
System.out.println("期間: " + duration.toHours() + "時間, " + duration.toMinutesPart() + "分");
}
}
参考リンク
まとめ
java.time
パッケージは、Javaでの日時操作をより簡単かつ安全に行うための強力なツールです。LocalDate
, LocalTime
, LocalDateTime
, Period
, Duration
などのクラスを理解し、適切に使いこなすことで、日時に関する様々な処理を効率的に実装できます。この記事を参考に、java.time
パッケージを活用して、より洗練されたJavaアプリケーションを開発してください。