こんにちは!今回は、Javaの「java.time」パッケージについて、初心者の方でもわかるように、わかりやすく丁寧に解説していきます。
Javaで日付や時間を扱うとき、どうしても難しいと感じた経験はありませんか?
「年月日を計算するのが面倒」「違うタイムゾーンの日時を表示したいけどうまくいかない」
……そんな悩みを解決するのが、この java.time パッケージです。
1. java.timeとは?なぜ必要か?
かつてJavaでは、日付や時間の処理に java.util.Date や Calendar クラスが使われていましたが、以下のような課題がありました。
- 可変オブジェクトのためバグが起きやすい
- スレッドセーフでない
- メソッド名が直感的でない
- タイムゾーンや期間の計算が複雑
これらの問題を解決するために登場したのが、Java 8で導入された java.time パッケージです。特徴は以下のとおりです。
- 不変(immutable)で安全
- 明確な役割ごとのクラス設計(LocalDate, LocalTime, ZonedDateTime など)
- シンプルなAPIで直感的に使える
- 日付・時間の加算、減算、差分計算が簡単
2. 日付と時間を扱う基本クラス
LocalDate(年月日)
|
1 2 3 |
LocalDate today = LocalDate.now(); LocalDate birthday = LocalDate.of(1990, 12, 25); |
LocalTime(時分秒)
|
1 2 3 |
LocalTime now = LocalTime.now(); LocalTime specificTime = LocalTime.of(14, 30); |
LocalDateTime(年月日時分秒)
|
1 2 3 |
LocalDateTime now = LocalDateTime.now(); LocalDateTime future = now.plusDays(5); |
3. タイムゾーンを扱うクラス
ZonedDateTime(タイムゾーン付きの日時)
|
1 2 3 |
ZonedDateTime tokyoTime = ZonedDateTime.now(ZoneId.of("Asia/Tokyo")); ZonedDateTime utcTime = tokyoTime.withZoneSameInstant(ZoneOffset.UTC); |
OffsetDateTime(UTCからのオフセット付き)
|
1 2 |
OffsetDateTime offset = OffsetDateTime.now(ZoneOffset.ofHours(9)); |
4. 期間・時間差の計算
Period(年月日の差)
|
1 2 |
Period between = Period.between(LocalDate.of(2020, 1, 1), LocalDate.now()); |
Duration(時分秒の差)
|
1 2 |
Duration duration = Duration.between(LocalTime.of(10, 0), LocalTime.of(12, 30)); |
5. フォーマットとパース
|
1 2 3 4 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. 時間の加算・減算・比較
|
1 2 3 4 5 6 |
LocalDate today = LocalDate.now(); LocalDate tomorrow = today.plusDays(1); LocalDate lastWeek = today.minusWeeks(1); boolean isAfter = tomorrow.isAfter(today); // true |
7. 応用例:通知・営業日・締切計算
通知リマインダー設定
|
1 2 3 |
LocalDateTime meeting = LocalDateTime.of(2025, 12, 10, 14, 0); LocalDateTime reminder = meeting.minusHours(1); |
営業日(平日のみ)を求める
|
1 2 |
LocalDate nextBusinessDay = today.with(TemporalAdjusters.next(DayOfWeek.MONDAY)); |
8. タイムゾーン変換・夏時間対応
|
1 2 3 |
ZonedDateTime ny = ZonedDateTime.now(ZoneId.of("America/New_York")); ZonedDateTime tokyo = ny.withZoneSameInstant(ZoneId.of("Asia/Tokyo")); |
9. よくある間違いと対策
Dateと混在させない(java.timeを使うべき)withZoneSameLocalとwithZoneSameInstantの使い分けに注意- ミリ秒まで扱いたい場合は
Instantを使う
10. 学習のステップと転職での活用
LocalDateとLocalTimeを実際に使ってみるDurationやPeriodで差分を取ってみるZonedDateTimeでタイムゾーン変換を練習DateTimeFormatterを使ってフォーマットに慣れる- 書籍 絶対にJavaプログラマーになりたい人へ。 で知識を体系化
- サイゼントアカデミー で学習+転職支援を受ける
まとめ
java.timeパッケージは、モダンJavaにおいて不可欠な時間API- 不変で安全、直感的なAPIが魅力
- フォーマット、タイムゾーン、期間計算、通知設定まで幅広くカバー
- 転職面接や業務でも、使いこなせれば評価アップ間違いなし!
これで、あなたも「時間を自在に操るJavaプログラマー」へ一歩近づきました。
さらに詳しい解説や演習が必要な方は、気軽にご相談ください。


コメント