我有一个简单的代码:
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。我做错了什么?请在这里分享一些建议。
好吧,来自DateTimeFormatter#withZone()
:的Javadoc
返回一个新的格式化程序,该格式化程序将优先使用指定的区域,而不是打印对象的区域或解析中的默认区域。
因此,您告诉格式化程序在解析AND输出时使用特定的时区,而您给它的输入不包含时区,所以这是预期的结果。本质上你说:
- 这是一个没有时区的日期字符串,假设美国/纽约进行解析
- 将日期转换回字符串,时区为America/New_York
它就是这么做的。