Joda从dateTime获得正确的时间

时间:2015-11-30 21:16:37

标签: java datetime timezone jodatime

我有这个简单的代码:

    DateTimeFormatter formatter = DateTimeFormat.forPattern("HH:mm yyyy-MM-dd");

    DateTime dateTime = formatter.withZone(DateTimeZone.forID("America/New_York")).parseDateTime("08:30 2015-06-01");
    DateTime dateTime2 = formatter.withZone(DateTimeZone.forID("America/New_York")).parseDateTime("08:30 2015-12-01");

这些是闰年。当我点击toString方法时,我得到了这样的东西:

2015-06-01T08:30:00.000-04:00
2015-12-01T08:30:00.000-05:00

这是正确的,我们可以看到UTC时间偏移。但是当我打电话给getHourOfDay时,我得到了8而不是预期的4/3。我究竟做错了什么?请在这里分享一些建议。

1 个答案:

答案 0 :(得分:1)

嗯,来自DateTimeFormatter#withZone()的Javadoc:

  

返回一个新的格式化程序,它将优先使用指定的区域,而不是打印对象的区域,或者是解析的默认区域。

所以,你告诉格式化程序在解析和输出时使用特定的时区,你给它的输入不包含时区,所以这是预期的结果。实质上你说:

  1. 这是一个没有时区的日期字符串,假设是America / New_York
  2. 解析它
  3. 将日期转换回字符串,在时区America / New_York
  4. 这就是它所做的。