Javaの「java.time」パッケージで時間操作を完全制覇!初心者にもわかる最強の時間API入門

Java

こんにちは!今回は、Javaの「java.time」パッケージについて、初心者の方でもわかるように、わかりやすく丁寧に解説していきます。

Javaで日付や時間を扱うとき、どうしても難しいと感じた経験はありませんか?
「年月日を計算するのが面倒」「違うタイムゾーンの日時を表示したいけどうまくいかない」
……そんな悩みを解決するのが、この java.time パッケージです。


1. java.timeとは?なぜ必要か?

かつてJavaでは、日付や時間の処理に java.util.DateCalendar クラスが使われていましたが、以下のような課題がありました。

  • 可変オブジェクトのためバグが起きやすい
  • スレッドセーフでない
  • メソッド名が直感的でない
  • タイムゾーンや期間の計算が複雑

これらの問題を解決するために登場したのが、Java 8で導入された java.time パッケージです。特徴は以下のとおりです。

  • 不変(immutable)で安全
  • 明確な役割ごとのクラス設計(LocalDate, LocalTime, ZonedDateTime など)
  • シンプルなAPIで直感的に使える
  • 日付・時間の加算、減算、差分計算が簡単

2. 日付と時間を扱う基本クラス

LocalDate(年月日)

LocalDate today = LocalDate.now();
LocalDate birthday = LocalDate.of(1990, 12, 25);

LocalTime(時分秒)

LocalTime now = LocalTime.now();
LocalTime specificTime = LocalTime.of(14, 30);

LocalDateTime(年月日時分秒)

LocalDateTime now = LocalDateTime.now();
LocalDateTime future = now.plusDays(5);

3. タイムゾーンを扱うクラス

ZonedDateTime(タイムゾーン付きの日時)

ZonedDateTime tokyoTime = ZonedDateTime.now(ZoneId.of("Asia/Tokyo"));
ZonedDateTime utcTime = tokyoTime.withZoneSameInstant(ZoneOffset.UTC);

OffsetDateTime(UTCからのオフセット付き)

OffsetDateTime offset = OffsetDateTime.now(ZoneOffset.ofHours(9));

4. 期間・時間差の計算

Period(年月日の差)

Period between = Period.between(LocalDate.of(2020, 1, 1), LocalDate.now());

Duration(時分秒の差)

Duration duration = Duration.between(LocalTime.of(10, 0), LocalTime.of(12, 30));

5. フォーマットとパース

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
String formatted = LocalDateTime.now().format(formatter);

LocalDateTime parsed = LocalDateTime.parse("2025/12/01 10:00:00", formatter);

6. 時間の加算・減算・比較

LocalDate today = LocalDate.now();
LocalDate tomorrow = today.plusDays(1);
LocalDate lastWeek = today.minusWeeks(1);

boolean isAfter = tomorrow.isAfter(today); // true

7. 応用例:通知・営業日・締切計算

通知リマインダー設定

LocalDateTime meeting = LocalDateTime.of(2025, 12, 10, 14, 0);
LocalDateTime reminder = meeting.minusHours(1);

営業日(平日のみ)を求める

LocalDate nextBusinessDay = today.with(TemporalAdjusters.next(DayOfWeek.MONDAY));

8. タイムゾーン変換・夏時間対応

ZonedDateTime ny = ZonedDateTime.now(ZoneId.of("America/New_York"));
ZonedDateTime tokyo = ny.withZoneSameInstant(ZoneId.of("Asia/Tokyo"));

9. よくある間違いと対策

  • Dateと混在させない(java.timeを使うべき)
  • withZoneSameLocalwithZoneSameInstantの使い分けに注意
  • ミリ秒まで扱いたい場合は Instant を使う

10. 学習のステップと転職での活用

  1. LocalDateLocalTimeを実際に使ってみる
  2. DurationPeriodで差分を取ってみる
  3. ZonedDateTimeでタイムゾーン変換を練習
  4. DateTimeFormatterを使ってフォーマットに慣れる
  5. 書籍 絶対にJavaプログラマーになりたい人へ。 で知識を体系化
  6. サイゼントアカデミー で学習+転職支援を受ける

まとめ

  • java.time パッケージは、モダンJavaにおいて不可欠な時間API
  • 不変で安全、直感的なAPIが魅力
  • フォーマット、タイムゾーン、期間計算、通知設定まで幅広くカバー
  • 転職面接や業務でも、使いこなせれば評価アップ間違いなし!

これで、あなたも「時間を自在に操るJavaプログラマー」へ一歩近づきました。
さらに詳しい解説や演習が必要な方は、気軽にご相談ください。

コメント

タイトルとURLをコピーしました