gpt4 book ai didi

java - 将时区指定为 GMT 的日期字符串转换

转载 作者:行者123 更新时间:2023-12-01 10:18:46 25 4
gpt4 key购买 nike

我有以下代码来从给定的日期字符串中解析出 ZonedDateTime 对象,输入字符串的格式如下:

“2016 年 3 月 3 日星期四 02:42:00 +1000(澳大利亚东部标准时间)”

我的解析代码是这样的:

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>

我不明白出了什么问题,如果我有凌晨 2:42 的时间,并且减去 +10 小时的偏移量,那么我应该得到下午 4:42 的结果(即小时为 16)。

我将字符串转换为 ZonedDateTime 的方式是否有问题,或者我的代码有其他问题吗?

编辑:

好吧,看起来我正在做的时区转换忽略了我传入的时区偏移量,并考虑了给定日期的实际时区(即现在澳大利亚东部是夏令时,所以实际偏移量是 +1100 而不是 +1000)。

现在我的问题是,如何让Java接受我传递给它的偏移量,而不是让它聪明地使用自己的时区规则集来执行转换?

最佳答案

AEST 时区现在为 +11 小时(DST),因此字符串 +1000 基本上被忽略并应用 -11 小时偏移

您可以从测试中删除符号时区名称 (AEST),并仅在 +1000 上中继,或者调整您的测试

关于java - 将时区指定为 GMT 的日期字符串转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35753442/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com