2013-02-25 79 views
3

对于下面的代码我得到不同的输出爪哇getTimeZone获取()表现不同对于不同种输入

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 

现在美洲/洛杉矶是GMT-8/UTC-8或PST。但是,当我改变参数从GMT-8 美洲/洛杉矶

输出是:

08/22/2013  true 

不能使用PST像自弃用的缩写。 CST也可以表示中央标准时间中国标准时间

我的输入是-8,-9 -14等,我希望在其中添加GMT/UTC,以了解是否可以在给定日期获得DST激活。

请在这方面指导我。

+1

是不是很期待?您不能保证GMT-8下的所有地点都有DST。每个国家/州政府对DST的管理方式都有所不同。 – gerrytan 2013-02-25 05:47:55

+0

Java TimeZone有一个可用的ID列表(getAvailableIDs()),如America/Boise America/Cambridge_Bay,America/Chihuahua,America/Dawson_Creek 美国/丹佛,美国/埃德蒙顿,美国/埃莫西约 美国/伊努维克,美国/马萨特兰,America/Ojinaga 美国/凤凰城,美国/ Shiprock,美国/耶洛奈夫是随机的,并非所有的城市都在这里覆盖(波士顿华盛顿例子)。那么我如何确保使用有限的选项获得日光信息 – nixsix6 2013-02-25 05:59:35

回答

3

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

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

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

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

China Standard Time区ID是CTT

编辑

考虑使用Joda time and date API了解更多最新的Timezone信息离子

+0

会是很好用它知道这是弃用? – nixsix6 2013-02-25 05:55:19

+0

要使用什么? – iTech 2013-02-25 05:57:43

+0

TimeZone.getTimeZone(“CST”)已弃用。 – nixsix6 2013-02-25 06:01:37

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());