【问题标题】:Confusion with Calendar object与日历对象混淆
【发布时间】:2015-06-26 04:11:26
【问题描述】:

我有一个以毫秒为单位的日期时间。例如: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”,其格式为“yyyy-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。如您所见,它们是两种不同的行为。我真的很困惑。任何帮助澄清这种行为?

【问题讨论】:

  • 我知道这不是一个答案,但我推荐你 joda-time 或 Apache Commons 的 DateUtils !:)
  • 您应该解释这个FastDateFormat 类的来源,因为它没有与Java 捆绑在一起。 Google 知道至少有两种,一种在 Tomcat 上,一种在 Apache utils 上。
  • 来自 apache commons lang 包的 FastDateFormat。它的功能与 SimpleDateFormat 类相同
  • @user3919392 您的 JVM 和主机操作系统的默认时区是什么?

标签: java date datetime calendar


【解决方案1】:

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

一个月同上。

【讨论】:

  • 我提供了你提到的两位数,但仍然有同样的问题.. :(
猜你喜欢
  • 2015-10-02
  • 1970-01-01
  • 2012-05-21
  • 1970-01-01
  • 2011-03-04
  • 2012-03-04
  • 2010-11-12
  • 1970-01-01
  • 2010-11-30
相关资源
最近更新 更多