与Calendar对象混淆

时间:2015-04-19 14:02:03

标签: java date datetime calendar

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

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”,格式为“yyyy-MM-dd hh:mm:ss”。并使用以下代码我再次创建Calender函数。

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.如您所见,它们是两种不同的行为。我真的很困惑。有没有帮助澄清这种行为?

1 个答案:

答案 0 :(得分:0)

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

同上一个月。