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 与日历对象混淆_Java_Date_Datetime_Calendar - Fatal编程技术网

Java 与日历对象混淆

Java 与日历对象混淆,java,date,datetime,calendar,Java,Date,Datetime,Calendar,我有一个以毫秒为单位的日期时间。例如:1394504624657L并使用下面的代码将其转换为日历对象 Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC")); cal.setTimeInMillis(millis); 其上方可以是UTC或GMT 1394504624657L represents Tuesday, March 11, 2014 2:23:44 AM GMT 然后我返回cal.get(Calendar.H

我有一个以毫秒为单位的日期时间。例如:1394504624657L并使用下面的代码将其转换为日历对象

Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
cal.setTimeInMillis(millis);
其上方可以是UTC或GMT

1394504624657L represents Tuesday, March 11, 2014 2:23:44 AM GMT
然后我返回
cal.get(Calendar.HOUR)
返回2,这是期望值。但是当我删除区域并使用默认区域时,它返回7。使用此功能的正确方法应该是什么

使用FastDateFormat时,我得到的日期值为“2014-3-11 2:23:44”,其格式为“yyy-MM-dd hh:MM:ss”。使用下面的代码,我再次创建日历函数

Calendar cal = Calendar.getInstance();
FastDateFormat userSpecificFormat;
userSpecificFormat = FastDateFormat.getInstance("yyyy-MM-dd hh:mm:ss");
Date userSpecifiedDate = userSpecificFormat.parse("2014-3-11 2:23:44");
cal.setTime(userSpecifiedDate);

然后我返回
cal.get(Calendar.HOUR)
返回2,这是期望值。但是如果我将区域设置为(TimeZone.getTimeZone(“UTC”),它将返回8。正如你所看到的,它们是两种不同的行为。我真的很困惑。是否有助于澄清此行为?

解析格式和输入字符串之间可能不匹配。模式中的小时有两个字符,这意味着至少有两个数字。但您的输入数据有一个小时的单位数字


本月也是如此。

我知道这不是一个答案,但我建议您使用Apache Commons的joda time或DateUtils!:)您应该解释这个
FastDateFormat
类的来源,因为它没有与Java捆绑在一起。谷歌知道至少有两个,一个在Tomcat上,另一个在ApacheCommonsLang包中使用ApacheUtils.FastDateFormat。其功能与SimpleDataFormat相同class@user3919392JVM和主机操作系统的默认时区是什么?我提供了两个数字,正如您所提到的,但仍然有相同的问题..:(