Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java getTimeZone()对于不同类型的输入表现不同_Java_Date_Timezone_Dst - Fatal编程技术网

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

Java getTimeZone()对于不同类型的输入表现不同,java,date,timezone,dst,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 = Calen

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

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
08/22/2013      true
现在美国/洛杉矶是GMT-8/UTC-8或PST。但当我将参数从GMT-8改为America/Los_Angeles时

输出为:

08/22/2013      false
08/22/2013      true
无法使用类似PST的缩写,因为它已被弃用。CST也可以指中央标准时间和中国标准时间

我的输入是-8、-9-14等,我希望预先输入GMT/UTC,以了解我是否可以在给定日期获得DST激活


请在这方面指导我。

结果是正确的,当您使用偏移量指定
GMT
时,无法知道这是哪个国家/城市,因此无法确定
日间照明时间是否处于活动状态

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

CST
在Java中是
中央标准时间
,您可以通过以下代码行进行检查:

System.out.println(TimeZone.getTimeZone("CST").getDisplayName());
中国标准时间
Java区域ID为
CTT

编辑


考虑使用更多最新的
时区
信息

结果是正确的,如@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());

这不是预期的吗?您不能保证GMT-8下的所有位置都有DST。DST由每个国家/州政府进行不同的管理。Java时区有一个可用ID列表(getAvailableIDs()),如美国/博伊西美国/剑桥湾、美国/奇瓦瓦、美国/道森河美国/丹佛、美国/埃德蒙顿、美国/赫莫西洛美国/因纽维克、美国/马萨特兰、美国/奥金纳加美国/凤凰城、美国/希普洛克、,美国/Yellowknife是随机的,这里并不是涵盖所有城市(例如波士顿、华盛顿)。因此,我如何确保使用不推荐使用的有限选项TimeZone.getTimeZone(“CST”)获取日光信息。是的,最好使用全名,尤其是
inDaylightTime
来工作您的意思是时区t=TimeZone.getTimeZone(“中央标准时间”);?我认为这不受支持。不,它不会起作用,我的意思是使用完整的区域名称,例如
America/Los_Angeles
let us