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 也可以表示Central Standard timeChina Standard Time

我的输入类似于 -8、-9 -14 等,我希望在其前面加上 GMT/UTC 以了解我是否可以在给定日期获得 DST 激活。

请在这方面指导我。

4

2 回答 2

3

结果是正确的,当您指定GMT偏移量时,无法知道这是哪个国家/城市,因此无法确定是否Day Light Time处于活动状态。

对于inDaylightTime()使用和偏移false指定的所有时区也是如此。GMT

CST在 Java 中Central 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 回答