広告

Java : TimeZone (タイムゾーン) - API使用例

TimeZone (Java SE 21 & JDK 21) の使い方まとめです。
だいたいのメソッドを網羅済みです。
API仕様書のおともにどうぞ。

注意

  • TimeZone クラスは、非推奨(@Deprecated) にこそなっていませんが、古い API です。
    代わりに、java.time パッケージにある ZoneIdZoneOffset などの新しい API を使うことをおすすめします。


概要

TimeZoneは、タイムゾーン・オフセットを表します。また、サマー・タイムを認識します。

クラス構成

final var zone = TimeZone.getTimeZone("America/Los_Angeles");
System.out.println(zone.getID()); // America/Los_Angeles
System.out.println(zone.getDisplayName(Locale.US)); // Pacific Standard Time

final var calendar = new Calendar.Builder()
        .setDate(2100, Calendar.JANUARY, 1)
        .setTimeOfDay(14, 30, 59)
        .setTimeZone(zone)
        .build();

// 2100-01-01 14:30:59 -0800 PST
System.out.printf("%tF %tT %tz %tZ%n", calendar, calendar, calendar, calendar);

フィールド

static final int LONG

「Pacific Standard Time」などの長い名前を示すgetDisplayName()のスタイル指示子です。

final var zone = TimeZone.getTimeZone("America/Los_Angeles");

final var name1 = zone.getDisplayName(false, TimeZone.LONG, Locale.US);
System.out.println(name1); // Pacific Standard Time

final var name2 = zone.getDisplayName(false, TimeZone.SHORT, Locale.US);
System.out.println(name2); // PST

static final int SHORT

「PST」などの短い名前を示すgetDisplayName()のスタイル指示子です。

final var zone = TimeZone.getTimeZone("America/Los_Angeles");

final var name1 = zone.getDisplayName(false, TimeZone.LONG, Locale.US);
System.out.println(name1); // Pacific Standard Time

final var name2 = zone.getDisplayName(false, TimeZone.SHORT, Locale.US);
System.out.println(name2); // PST

コンストラクタ

TimeZone ()

唯一のコンストラクタです。

サブクラス用です。
独自にサブクラスを作ることは少ないと思いますので、コード例は割愛します。

メソッド

Object clone ()

このTimeZoneのコピーを作成します。

final var zone = TimeZone.getTimeZone("America/Los_Angeles");
System.out.println(zone.getID()); // America/Los_Angeles

if (zone.clone() instanceof TimeZone cloned) {
    System.out.println(cloned.getID()); // America/Los_Angeles
}

static String[] getAvailableIDs ()

サポートされる利用可能なIDをすべて取得します。

final var ids = TimeZone.getAvailableIDs();
for (final var id : ids) {
    System.out.println(id);
}

// 結果
// ↓
//Africa/Abidjan
//Africa/Accra
//Africa/Addis_Ababa
//Africa/Algiers
//Africa/Asmara
//Africa/Asmera
//Africa/Bamako
//Africa/Bangui
//...

static String[] getAvailableIDs (int rawOffset)

ミリ秒単位で指定されたタイムゾーン・オフセットと一致するIDで使用可能なものを取得します。

final var ids = TimeZone.getAvailableIDs(-28800000);
for (final var id : ids) {
    System.out.println(id);
}

// 結果
// ↓
//America/Ensenada
//America/Los_Angeles
//America/Santa_Isabel
//America/Tijuana
//America/Vancouver
//Canada/Pacific
//Etc/GMT+8
//Mexico/BajaNorte
//PST
//PST8PDT
//Pacific/Pitcairn
//SystemV/PST8
//SystemV/PST8PDT
//US/Pacific

static TimeZone getDefault ()

Java仮想マシンのデフォルトのTimeZoneを取得します。

System.out.println(Locale.getDefault().toLanguageTag()); // ja-JP

final var zone1 = TimeZone.getDefault();
System.out.println(zone1.toZoneId()); // Asia/Tokyo
System.out.println(zone1.getDisplayName()); // 日本標準時
System.out.println(zone1.getDisplayName(Locale.US)); // Japan Standard Time

TimeZone.setDefault(TimeZone.getTimeZone("America/Los_Angeles"));

final var zone2 = TimeZone.getDefault();
System.out.println(zone2.toZoneId()); // America/Los_Angeles
System.out.println(zone2.getDisplayName()); // アメリカ太平洋標準時
System.out.println(zone2.getDisplayName(Locale.US)); // Pacific Standard Time

final String getDisplayName ()

デフォルト・ロケールでのユーザーへの表示に適した、このTimeZoneの標準時の長い名前を返します。

System.out.println(Locale.getDefault().toLanguageTag()); // ja-JP

final var zone1 = TimeZone.getDefault();
System.out.println(zone1.toZoneId()); // Asia/Tokyo
System.out.println(zone1.getDisplayName()); // 日本標準時
System.out.println(zone1.getDisplayName(Locale.US)); // Japan Standard Time

TimeZone.setDefault(TimeZone.getTimeZone("America/Los_Angeles"));

final var zone2 = TimeZone.getDefault();
System.out.println(zone2.toZoneId()); // America/Los_Angeles
System.out.println(zone2.getDisplayName()); // アメリカ太平洋標準時
System.out.println(zone2.getDisplayName(Locale.US)); // Pacific Standard Time

final String getDisplayName (boolean daylight, int style)

デフォルト・ロケールでのユーザーへの表示に適した、このTimeZoneの指定されたstyleでの名前を返します。

System.out.println(Locale.getDefault().toLanguageTag()); // ja-JP

final var zone = TimeZone.getTimeZone("America/Los_Angeles");

{
    final var name1 = zone.getDisplayName(false, TimeZone.LONG);
    System.out.println(name1); // アメリカ太平洋標準時

    final var name2 = zone.getDisplayName(false, TimeZone.SHORT);
    System.out.println(name2); // PST
}
{
    final var name1 = zone.getDisplayName(true, TimeZone.LONG);
    System.out.println(name1); // アメリカ太平洋夏時間

    final var name2 = zone.getDisplayName(true, TimeZone.SHORT);
    System.out.println(name2); // PDT
}

String getDisplayName (boolean daylight, int style, Locale locale)

指定された localeでのユーザーへの表示に適した、このTimeZoneの指定されたstyleでの名前を返します。

各パラメータについては、下記の使用例をご参照ください。

final String getDisplayName (Locale locale)

指定されたlocaleでのユーザーへの表示に適した、このTimeZoneの標準時の長い名前を返します。

final var zone = TimeZone.getTimeZone("America/Los_Angeles");
System.out.println(zone.getDisplayName(Locale.US)); // Pacific Standard Time
System.out.println(zone.getDisplayName(Locale.JAPAN)); // アメリカ太平洋標準時
final var zone = TimeZone.getTimeZone("Asia/Tokyo");
System.out.println(zone.getDisplayName(Locale.US)); // Japan Standard Time
System.out.println(zone.getDisplayName(Locale.JAPAN)); // 日本標準時

int getDSTSavings ()

ローカル・ウォール時計時間を取得するために、ローカルの標準時間に追加する時間の量を返します。

final var zone = TimeZone.getTimeZone("America/Los_Angeles");

System.out.println(zone.useDaylightTime()); // true
System.out.println(zone.getDSTSavings()); // 3600000
final var zone = TimeZone.getTimeZone("Asia/Tokyo");

System.out.println(zone.useDaylightTime()); // false
System.out.println(zone.getDSTSavings()); // 0

String getID ()

現在の所在地のタイムゾーンのIDを取得します。

final var zone = TimeZone.getTimeZone("America/Los_Angeles");
System.out.println(zone.getID()); // America/Los_Angeles
System.out.println(zone.getRawOffset()); // -28800000

zone.setID("UTC");
System.out.println(zone.getID()); // UTC
System.out.println(zone.getRawOffset()); // -28800000

zone.setRawOffset(0);
System.out.println(zone.getRawOffset()); // 0

abstract int getOffset (int era, int year, int month, int day, int dayOfWeek, int milliseconds)

現在の日付のタイムゾーン・オフセットを返します。夏時間の期間内であれば修正されています。

final var zone = TimeZone.getTimeZone("America/Los_Angeles");

final var offset1 = zone.getOffset(1, 2100, 0, 3, 1, 0);
System.out.println(offset1); // -28800000

System.out.println(zone.useDaylightTime()); // true

final var offset2 = zone.getOffset(1, 2100, 7, 1, 1, 0);
System.out.println(offset2); // -25200000
final var zone = TimeZone.getTimeZone("UTC");

final var offset = zone.getOffset(1, 2100, 0, 3, 1, 0);
System.out.println(offset); // 0

int getOffset (long date)

指定された日付でUTCからのこのタイムゾーンのオフセットを返します。

final var calendar = new Calendar.Builder()
        .setDate(2100, Calendar.JANUARY, 1)
        .setTimeZone(TimeZone.getTimeZone("UTC"))
        .build();
System.out.printf("%tF %tT%n", calendar, calendar); // 2100-01-01 00:00:00

final var zone = TimeZone.getTimeZone("America/Los_Angeles");

final var date1 = calendar.getTimeInMillis();
System.out.println(date1); // 4102444800000

final var offset1 = zone.getOffset(date1);
System.out.println(offset1); // -28800000

System.out.println(zone.useDaylightTime()); // true

calendar.set(Calendar.MONTH, Calendar.AUGUST);
System.out.printf("%tF %tT%n", calendar, calendar); // 2100-08-01 00:00:00

final var date2 = calendar.getTimeInMillis();
System.out.println(date2); // 4120761600000

final var offset2 = zone.getOffset(date2);
System.out.println(offset2); // -25200000
final var zone = TimeZone.getTimeZone("UTC");

final var offset = zone.getOffset(4102444800000L);
System.out.println(offset); // 0

abstract int getRawOffset ()

このタイムゾーンの標準時間を取得するために、UTCに追加するミリ秒単位の時間量を返します。

final var zone = TimeZone.getTimeZone("America/Los_Angeles");
System.out.println(zone.getID()); // America/Los_Angeles
System.out.println(zone.getRawOffset()); // -28800000
final var zone = TimeZone.getTimeZone("Asia/Tokyo");
System.out.println(zone.getID()); // Asia/Tokyo
System.out.println(zone.getRawOffset()); // 32400000
final var zone = TimeZone.getTimeZone("UTC");
System.out.println(zone.getID()); // UTC
System.out.println(zone.getRawOffset()); // 0

static TimeZone getTimeZone (String ID)

指定されたIDのTimeZoneを取得します。

final var zone = TimeZone.getTimeZone("America/Los_Angeles");
System.out.println(zone.getID()); // America/Los_Angeles
System.out.println(zone.getRawOffset()); // -28800000
final var zone = TimeZone.getTimeZone("Asia/Tokyo");
System.out.println(zone.getID()); // Asia/Tokyo
System.out.println(zone.getRawOffset()); // 32400000
final var zone = TimeZone.getTimeZone("UTC");
System.out.println(zone.getID()); // UTC
System.out.println(zone.getRawOffset()); // 0

static TimeZone getTimeZone (ZoneId zoneId)

指定されたzoneIdのTimeZoneを取得します。

final var zone = TimeZone.getTimeZone(ZoneId.of("America/Los_Angeles"));
System.out.println(zone.getID()); // America/Los_Angeles
System.out.println(zone.getRawOffset()); // -28800000
final var zone = TimeZone.getTimeZone(ZoneId.of("Asia/Tokyo"));
System.out.println(zone.getID()); // Asia/Tokyo
System.out.println(zone.getRawOffset()); // 32400000
final var zone = TimeZone.getTimeZone(ZoneId.of("UTC"));
System.out.println(zone.getID()); // UTC
System.out.println(zone.getRawOffset()); // 0

boolean hasSameRules (TimeZone other)

このゾーンが比較される別のゾーンと同じルールとオフセットを持つ場合にtrueを返します。

final var zone1 = TimeZone.getTimeZone("UTC");
final var zone2 = TimeZone.getTimeZone("America/Los_Angeles");

System.out.println(zone1.hasSameRules(zone2)); // false

final var zone3 = TimeZone.getTimeZone(ZoneId.of("GMT+0"));

System.out.println(zone1.hasSameRules(zone3)); // true

abstract boolean inDaylightTime (Date date)

指定されたdateが、このタイムゾーンでは夏時間の期間内かどうかを問い合わせます。

final var calendar = new Calendar.Builder()
        .setDate(2100, Calendar.JANUARY, 1)
        .setTimeZone(TimeZone.getTimeZone("UTC"))
        .build();
System.out.printf("%tF %tT%n", calendar, calendar); // 2100-01-01 00:00:00

final var zone = TimeZone.getTimeZone("America/Los_Angeles");

System.out.println(zone.inDaylightTime(calendar.getTime())); // false

calendar.set(Calendar.MONTH, Calendar.AUGUST);
System.out.printf("%tF %tT%n", calendar, calendar); // 2100-08-01 00:00:00

System.out.println(zone.inDaylightTime(calendar.getTime())); // true

boolean observesDaylightTime ()

このTimeZoneが現在夏時間の期間内にある場合、または標準時間から夏時間への移行が今後行われる場合にtrueを返します。

final var zone = TimeZone.getTimeZone("America/Los_Angeles");
System.out.println(zone.observesDaylightTime()); // true
final var zone = TimeZone.getTimeZone("UTC");
System.out.println(zone.observesDaylightTime()); // false

static void setDefault (TimeZone zone)

getDefaultメソッドで返されるTimeZoneを設定します。

System.out.println(Locale.getDefault().toLanguageTag()); // ja-JP

final var zone1 = TimeZone.getDefault();
System.out.println(zone1.toZoneId()); // Asia/Tokyo
System.out.println(zone1.getDisplayName()); // 日本標準時
System.out.println(zone1.getDisplayName(Locale.US)); // Japan Standard Time

TimeZone.setDefault(TimeZone.getTimeZone("America/Los_Angeles"));

final var zone2 = TimeZone.getDefault();
System.out.println(zone2.toZoneId()); // America/Los_Angeles
System.out.println(zone2.getDisplayName()); // アメリカ太平洋標準時
System.out.println(zone2.getDisplayName(Locale.US)); // Pacific Standard Time

void setID (String ID)

タイムゾーンIDを設定します。

final var zone = TimeZone.getTimeZone("America/Los_Angeles");
System.out.println(zone.getID()); // America/Los_Angeles
System.out.println(zone.getRawOffset()); // -28800000

zone.setID("UTC");
System.out.println(zone.getID()); // UTC
System.out.println(zone.getRawOffset()); // -28800000

zone.setRawOffset(0);
System.out.println(zone.getRawOffset()); // 0

abstract void setRawOffset (int offsetMillis)

GMTへのベース・タイムゾーン・オフセットを設定します。

final var zone = TimeZone.getTimeZone("America/Los_Angeles");
System.out.println(zone.getRawOffset()); // -28800000

zone.setRawOffset(0);

System.out.println(zone.getRawOffset()); // 0

ZoneId toZoneId ()

このTimeZoneオブジェクトをZoneIdに変換します。

final var zone = TimeZone.getTimeZone("America/Los_Angeles");

final var zoneId = zone.toZoneId();
System.out.println(zoneId); // America/Los_Angeles
final var zone = TimeZone.getTimeZone("UTC");

final var zoneId = zone.toZoneId();
System.out.println(zoneId); // UTC

abstract boolean useDaylightTime ()

このTimeZoneが夏時間を使用するかどうかを問い合わせます。

final var zone = TimeZone.getTimeZone("America/Los_Angeles");

System.out.println(zone.useDaylightTime()); // true
System.out.println(zone.getDSTSavings()); // 3600000
final var zone = TimeZone.getTimeZone("Asia/Tokyo");

System.out.println(zone.useDaylightTime()); // false
System.out.println(zone.getDSTSavings()); // 0

関連記事

ページの先頭へ