对于以下代码,我得到不同的输出
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。
请在这方面指导我。
答案 0 :(得分:3)
结果是正确的,当您指定带有偏移的GMT
时,无法知道哪个国家/地区是城市/城市,因此无法确定Day Light Time
是否有效。
对于使用inDaylightTime()
指定的所有时区和偏移,false
GMT
为CST
。
Central Standard Time
为System.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());