3

以下のコードでは、さまざまな出力が得られます

TimeZone t = TimeZone.getTimeZone("GMT-8");  // Also tried UTC-8 and GMT-8:00
//TimeZone t = TimeZone.getTimeZone("America/Los_Angeles"); 
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
Date d = null;

Calendar c = Calendar.getInstance(t);
c.set(Calendar.MONTH, Calendar.AUGUST);
c.set(Calendar.DAY_OF_MONTH, 22);
c.set(Calendar.YEAR, 2013);
d = c.getTime();

String s = sdf.format(d);
System.out.println(s + "        " + t.inDaylightTime(d));

出力は次のとおりです。

08/22/2013      false

現在、America/Los_Angelesは GMT-8 / UTC-8 または PST です。しかし、パラメーターを GMT-8 からAmerica/Los_Angelesに変更すると、

出力は次のとおりです。

08/22/2013      true

廃止されたため、PST のような略語は使用できません。また、CST は中部標準時中国標準時の両方を意味します。

私が持っている入力は、-8、-9 -14 などのようなもので、特定の日付に DST アクティベーションを取得できるかどうかを知るために、GMT/UTC を先頭に追加したいと考えています。

この点で私を導いてください。

4

2 に答える 2

3

結果は正しいです。GMTオフセットを指定すると、これがどの国/都市であるかを知る方法がないため、Day Light Timeがアクティブかどうかを判断することはできません。

およびオフセットで指定inDaylightTime()falseれたすべてのタイム ゾーンについても同様GMTです。

CSTJava isCentral Standard Timeでは、次のコード行で自分自身を確認できます。

System.out.println(TimeZone.getTimeZone("CST").getDisplayName());

China Standard TimeJavaのゾーンIDはCTT

編集

より最新の情報を取得するには、Joda の時刻と日付の APIの使用を検討してTimezoneください

于 2013-02-25T05:51:07.250 に答える
1

@iTechで説明されているように、結果は正しいです。追加するだけで、次のように利用可能なタイムゾーンIDを検索できます。

import java.util.TimeZone;

public class TimeZones {
    public static void main(String[] args) {
        String[] timezones = TimeZone.getAvailableIDs();
        System.out.println(timezones.length);
        for (String t : timezones) {
            System.out.println(t);  
        }
    }
}

これにより、利用可能な600のタイムゾーンの長いリストが印刷されます。

次に、省略形の表示名を次のように取得できます。

System.out.println(TimeZone.getTimeZone("IST").getDisplayName());
于 2013-02-25T06:40:42.103 に答える