カテゴリ: Java 更新日: 2026/02/21

JavaのZonedDateTimeクラスの使い方を完全ガイド!初心者でもわかる日付とタイムゾーンの操作

ZonedDateTimeクラス
ZonedDateTimeクラス

先生と生徒の会話形式で理解しよう

生徒

「Javaで世界中の時間を扱いたいんですが、タイムゾーン付きの日付ってどうやって扱うんですか?」

先生

「それならZonedDateTimeクラスがぴったりです。Javaのjava.timeパッケージで提供されている機能ですね。」

生徒

「なるほど、ZonedDateTimeって何ができるんですか?」

先生

「では、ZonedDateTimeの基本から使い方まで、一緒に見ていきましょう。」

1. ZonedDateTimeとは?

1. ZonedDateTimeとは?
1. ZonedDateTimeとは?

ZonedDateTimeは、Javaのjava.timeパッケージに含まれる日時クラスで、「日付・時刻・タイムゾーン」の3つの情報を同時に扱えるのが特徴です。

例えば、「日本時間の2025年9月4日 午後3時」を正確に表現し、他の国の時間帯と相互変換できます。java.util.DateCalendarの時代には複雑だった操作が、ZonedDateTimeでかなり直感的になります。

2. ZonedDateTimeの基本的な使い方

2. ZonedDateTimeの基本的な使い方
2. ZonedDateTimeの基本的な使い方

以下は現在の日時をタイムゾーン付きで取得する基本的なコード例です。


import java.time.ZonedDateTime;

public class ZonedDateTimeExample {
    public static void main(String[] args) {
        ZonedDateTime now = ZonedDateTime.now();
        System.out.println("現在の日時(タイムゾーン付き): " + now);
    }
}

現在の日時(タイムゾーン付き): 2025-09-04T15:00+09:00[Asia/Tokyo]

このように、タイムゾーン情報(例:Asia/Tokyo)が自動的に付与されます。

3. 指定したタイムゾーンの日時を取得する

3. 指定したタイムゾーンの日時を取得する
3. 指定したタイムゾーンの日時を取得する

ZonedDateTimeZoneIdと組み合わせることで、世界中のタイムゾーンに対応できます。


import java.time.ZonedDateTime;
import java.time.ZoneId;

public class ZonedDateTimeWithZone {
    public static void main(String[] args) {
        ZonedDateTime nyTime = ZonedDateTime.now(ZoneId.of("America/New_York"));
        System.out.println("ニューヨークの現在時刻: " + nyTime);
    }
}

ニューヨークの現在時刻: 2025-09-04T02:00-04:00[America/New_York]

「America/New_York」など、IANA形式のゾーンIDを使用します。

4. ZonedDateTimeを文字列から作成する

4. ZonedDateTimeを文字列から作成する
4. ZonedDateTimeを文字列から作成する

LocalDateTimeZoneIdを使って、任意の日時からZonedDateTimeを生成できます。


import java.time.LocalDateTime;
import java.time.ZonedDateTime;
import java.time.ZoneId;

public class CreateZonedDateTime {
    public static void main(String[] args) {
        LocalDateTime ldt = LocalDateTime.of(2025, 12, 25, 10, 30);
        ZonedDateTime zdt = ZonedDateTime.of(ldt, ZoneId.of("Asia/Tokyo"));
        System.out.println("東京のクリスマス: " + zdt);
    }
}

東京のクリスマス: 2025-12-25T10:30+09:00[Asia/Tokyo]

任意の日時を、タイムゾーン付きで表現できます。

5. 他のタイムゾーンへ変換する

5. 他のタイムゾーンへ変換する
5. 他のタイムゾーンへ変換する

ZonedDateTimeを別のタイムゾーンに変換するにはwithZoneSameInstantメソッドを使います。


import java.time.ZonedDateTime;
import java.time.ZoneId;

public class ConvertTimeZone {
    public static void main(String[] args) {
        ZonedDateTime tokyoTime = ZonedDateTime.now(ZoneId.of("Asia/Tokyo"));
        ZonedDateTime londonTime = tokyoTime.withZoneSameInstant(ZoneId.of("Europe/London"));
        System.out.println("東京の時刻: " + tokyoTime);
        System.out.println("ロンドンの同時刻: " + londonTime);
    }
}

東京の時刻: 2025-09-04T15:00+09:00[Asia/Tokyo]
ロンドンの同時刻: 2025-09-04T07:00+01:00[Europe/London]

世界の異なる拠点で同時刻を扱うときに非常に便利です。

6. ZonedDateTimeのフォーマットと解析

6. ZonedDateTimeのフォーマットと解析
6. ZonedDateTimeのフォーマットと解析

DateTimeFormatterを使えば、ZonedDateTimeを見やすい文字列にフォーマットできます。


import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;

public class FormatZonedDateTime {
    public static void main(String[] args) {
        ZonedDateTime now = ZonedDateTime.now();
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm z");
        String formatted = now.format(formatter);
        System.out.println("フォーマット後: " + formatted);
    }
}

フォーマット後: 2025/09/04 15:00 JST

解析(パース)もZonedDateTime.parse()で可能です。

7. ZonedDateTimeの便利な操作

7. ZonedDateTimeの便利な操作
7. ZonedDateTimeの便利な操作

日付や時間の加算・減算も簡単です。


import java.time.ZonedDateTime;
import java.time.temporal.ChronoUnit;

public class AdjustZonedDateTime {
    public static void main(String[] args) {
        ZonedDateTime now = ZonedDateTime.now();
        ZonedDateTime nextWeek = now.plusWeeks(1);
        ZonedDateTime oneHourBefore = now.minusHours(1);
        System.out.println("1週間後: " + nextWeek);
        System.out.println("1時間前: " + oneHourBefore);
    }
}

1週間後: 2025-09-11T15:00+09:00[Asia/Tokyo]
1時間前: 2025-09-04T14:00+09:00[Asia/Tokyo]

ビジネスロジックでよく使う「日時の計算」もシンプルに行えます。

8. ZonedDateTimeとInstantの違い

8. ZonedDateTimeとInstantの違い
8. ZonedDateTimeとInstantの違い

InstantはUTCベースの「絶対時刻」、ZonedDateTimeは「人間が見やすい時間+タイムゾーン」です。

サーバー間通信やログ出力ではInstant、画面表示にはZonedDateTimeが適しています。

9. ZonedDateTimeのユースケース

9. ZonedDateTimeのユースケース
9. ZonedDateTimeのユースケース
  • グローバルサービスでのユーザーごとの時間表示
  • 航空券やイベントの現地時間管理
  • スケジュールアプリのタイムゾーン対応
  • 日付の変換・比較・保存の精度向上

Javaの基礎を最初から体系的に学びたい人には、 初心者向けで定評のある定番入門書がこちらです。

スッキリわかるJava入門 第4版をAmazonで見る

※ Amazon広告リンク

カテゴリの一覧へ
新着記事
New1
Spring
SpringDataJPAのJPAクエリメソッド「EndingWith」の使い方を完全ガイド!初心者向け解説
更新記事
New2
Spring
SpringDataJPAのJPAクエリメソッド「StartingWith」の使い方を完全ガイド!初心者向け解説
更新記事
New3
Spring
SpringDataJPAのJPAクエリメソッド「NotLike」の使い方を完全ガイド!初心者向け解説
更新記事
New4
Spring
SpringDataJPAのJPAクエリメソッド「Like」の使い方を完全ガイド!初心者向け解説
更新記事
人気記事
No.1
Java&Spring記事人気No1
Spring
Spring BootとJavaの互換性一覧!3.5/3.4/3.3はJava 21・17に対応してる?
No.2
Java&Spring記事人気No2
Java
JavaのBooleanクラスの使い方を完全ガイド!初心者でもわかる真偽値の操作
No.3
Java&Spring記事人気No3
Java
JavaのIOExceptionクラス徹底解説!初心者向けファイル入出力エラー対策ガイド
No.4
Java&Spring記事人気No4
JSP
JSPの基本タグ一覧と使い方まとめ!実務で使えるタグを紹介
No.5
Java&Spring記事人気No5
JSP
JSPでif文・for文を使う方法!初心者でもわかるJavaとの違いと使い方
No.6
Java&Spring記事人気No6
Spring
SpringのBindingResultを完全ガイド!初心者でもわかる入力チェックとエラー処理
No.7
Java&Spring記事人気No7
Spring
SpringのModelクラスとaddAttributeメソッドの使い方を完全ガイド!初心者でも安心
No.8
Java&Spring記事人気No8
Spring
SpringDataJPAのJPAクエリメソッド「EndingWith」の使い方を完全ガイド!初心者向け解説