我有下面的代码分析出从给定日期字符串ZonedDateTime
对象中,输入字符串的格式如下:转换与指定GMT
"Thu, 03 Mar 2016 02:42:00 +1000 (AEST)"
我的解析代码像这样:
public ZonedDateTime parseDate(String dateString) throws Exception {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("ccc, dd MMM yyyy HH:mm:ss Z (z)");
ZonedDateTime dateTime = ZonedDateTime.parse(dateString, formatter);
ZoneId gmt = ZoneId.of("GMT");
ZonedDateTime dateTimeInGMT = dateTime.withZoneSameInstant(gmt);
return dateTimeInGMT;
}
,我有这样的单元测试:
@Test
public void shouldParseTimezone() throws Exception {
MailFileParserJava parser = new MailFileParserJava();
String aestDateTime = "Thu, 03 Mar 2016 02:42:00 +1000 (AEST)";
ZonedDateTime aestZone = parser.parseDate(aestDateTime);
assertThat(aestZone.getDayOfMonth(), is(2));
assertThat(aestZone.getHour(), is(16));
}
但我的单元测试失败的getHour()断言 -
Expected: is <16>
but: was <15>
我不明白是怎么回事错的,如果我有时间上午02时42分,我减去+10小时的偏差,那么我应该得到4:42 pm的结果(即小时是16)。
我将字符串转换为ZonedDateTime
或其他代码错误的方式有问题吗?
编辑:
好了,它看起来像时区转换的东西我做忽略时间段偏移我通过,并考虑到实际的时区指定日期(即现在是白天在澳大利亚东部节省,所以真正的抵消是+1100而不是+1000)。
现在我的问题是,我如何让Java接受我传递它的偏移量,而不是使用它自己的一组时区规则来执行转换?
Your aestDateTime日期字符串错误。删除'Date:'前缀。 – Andreas
对不起,这应该不会出现,我仍然有同样的问题 – jcm
*“我如何让Java接受偏移量我传递它”* @Lashane已经告诉你:**删除符号时区名称(AEST)** – Andreas