Java getTimeZone()对于不同类型的输入表现不同

时间:2013-02-25 05:39:26

标签: java date timezone dst

对于以下代码,我得到不同的输出

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等,我希望在其中添加GMT / UTC以了解我是否可以在给定日期激活DST。

请在这方面指导我。

2 个答案:

答案 0 :(得分:3)

结果是正确的,当您指定带有偏移的GMT时,无法知道哪个国家/地区是城市/城市,因此无法确定Day Light Time是否有效。

对于使用inDaylightTime()指定的所有时区和偏移,false GMTCST

Java中的

Central Standard TimeSystem.out.println(TimeZone.getTimeZone("CST").getDisplayName()); ,您可以通过以下代码检查自己:

China Standard Time
Java中的

CTT区域ID为Timezone

修改

考虑使用 Joda time and date API 获取更新的{{1}}信息

答案 1 :(得分: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());