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

标签 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 以了解我是否可以在给定日期激活夏令时。

请在这方面指导我。

最佳答案

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

所以 inDaylightTime() 对于所有使用 GMT 和偏移量指定的时区都将为 false

CST在Java中是Central Standard Time,你可以通过这行代码自己查看:

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

中国标准时间 Java中的时区ID是CTT

编辑

考虑使用 Joda time and date API 获取更多最新的 Timezone 信息

关于Java getTimeZone() 对于不同类型的输入表现不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15060808/

相关文章:

java - 检查字符串中是否存在模式

java - 无法下载主题和发件人地址(rediff)

java - 如何从经过特定日期的日期列表中获取最近的 future 日期?

java - JSP 片段中的未知标记和未定义函数

java - 从 Java XMLGregorianCalendar 中删除时间戳

MySQL 日期范围选择

php - 如何显示菲律宾的默认本地时区?

php - DateTime 对象上的不同 timezone_types

ios - 解析远程通知和时区

Java 插入二维数组