Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.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 带日历的时区_Java_Date_Calendar_Simpledateformat - Fatal编程技术网

Java 带日历的时区

Java 带日历的时区,java,date,calendar,simpledateformat,Java,Date,Calendar,Simpledateformat,在使用UTC时区时,我遇到了日历和SimpleDataFormatter的一些意外行为。看起来SimpleDataFormatter给出了正确的结果,但Calendar没有。我不知道为什么。我使用以下代码使用日历生成日期: Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC")); cal.set(Calendar.YEAR, 2012); cal.set(Calendar.MONTH, Calend

在使用UTC时区时,我遇到了日历和SimpleDataFormatter的一些意外行为。看起来SimpleDataFormatter给出了正确的结果,但Calendar没有。我不知道为什么。我使用以下代码使用日历生成日期:

    Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
    cal.set(Calendar.YEAR, 2012);
    cal.set(Calendar.MONTH, Calendar.MARCH);
    cal.set(Calendar.DAY_OF_MONTH, 5);
    cal.set(Calendar.HOUR, 0);
    cal.set(Calendar.MINUTE, 0);
    cal.set(Calendar.SECOND, 0);
换句话说,2012年3月5日00:00 UTC
当我在本地CST时区打印此时间时,我得到: Mon Mar 05 06:00:00 CST 2012 我得到了预期的“2012年3月4日星期日18:00 CST”,即UTC前6小时,即UTC-6:00


为什么我的结果是错误的?

日历。HOUR
将小时设置为12小时格式,因此您没有将其设置为午夜,而是设置为中午12点

改为使用日历小时,或确保同时设置am/pm值:

cal.set(Calendar.AM_PM, Calendar.AM);

哇,这很微妙也很可怕。谢谢你指出这一点。更改后,单元测试现在通过。伟大的它是。Java8之前的日期/时间函数确实存在问题。如果您要大量处理这些问题,并且无法使用Java8,那么您可能需要查看一些特定的库。
cal.set(Calendar.AM_PM, Calendar.AM);