首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于不同类型的输入,Java getTimeZone()的行为方式不同

对于不同类型的输入,Java getTimeZone()的行为方式不同
EN

Stack Overflow用户
提问于 2013-02-25 05:39:26
回答 2查看 4.6K关注 0票数 3

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

代码语言:javascript
复制
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));

产出如下:

代码语言:javascript
复制
08/22/2013      false

现在美国/洛杉矶是GMT-8 / UTC-8或PST。但当我把参数从GMT-8转到美国/洛杉矶时,

产出如下:

代码语言:javascript
复制
08/22/2013      true

不能使用像PST这样的缩写,因为它被废弃了。科技委也可以是指中央标准时间和中国标准时间。

我的输入类似于-8,-9-14等等,我希望在GMT/UTC之前加上这些输入,以知道我是否能够在给定的日期获得DST激活。

请在这方面指导我。

EN

回答 2

Stack Overflow用户

发布于 2013-02-25 05:51:07

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

因此,inDaylightTime()将是用GMT和偏移量指定的所有时区的false

Java中的CSTCentral Standard Time,您可以通过以下代码行检查自己:

代码语言:javascript
复制
System.out.println(TimeZone.getTimeZone("CST").getDisplayName());

Java中的China Standard Time区域ID是CTT

编辑

考虑使用http://joda-time.sourceforge.net/获取更多最新的Timezone信息。

票数 3
EN

Stack Overflow用户

发布于 2013-02-25 06:40:42

正如@iTech所解释的,结果是正确的。只需添加,您就可以查找可用的时区ids

代码语言:javascript
复制
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个可用时区的长列表。

然后,您可以获得缩写的显示名称,如

代码语言:javascript
复制
System.out.println(TimeZone.getTimeZone("IST").getDisplayName());
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15060808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档