【发布时间】:2020-05-01 01:41:27
【问题描述】:
我有一个根据 Iso8601 解析字符串并返回 LocalDateTime 的方法。 现在我接受可能的偏移量。 现在的问题是我必须将偏移量转换为 UTC 并将其作为 LocalDateTime 返回。
到目前为止,我已经尝试过使用 Instant、OffsetDateTime、ZonedDateTime。 我总是得到相反的结果。我的结果将显示为 -06:00,而不是 +06:00。
return LocalDateTime.ofInstant(Instant.from(OffsetDateTime.parse(date, buildIso8601Formatter())), ZoneOffset.UTC);
这是与我上面提到的其他尝试过的解决方案相同的解决方案。
我知道这不是常用的方法,因此我做了很多研究,但当前的架构只允许我这样做。
编辑示例: 使用这样的实现:
OffsetDateTime offsetDateTime = OffsetDateTime.parse(date, buildIso8601Formatter());
Instant instant = offsetDateTime.toInstant();
return LocalDateTime.ofInstant(instant, ZoneOffset.UTC);
假设我得到"2020-01-12T08:30+06:00" 作为我的方法的输入。我必须返回 LocalDateTime。
因此,我想要"2020-01-12T14:30",而不是我最好的解决方案是相反的方式:"2020-01-12T02:30"。
【问题讨论】:
-
您尝试转换的时间是什么时候?你能把它和一些失败的尝试一起展示吗?
-
如果您正在处理偏移量,为什么要使用
LocalDateTime而不是(正确的)使用OffsetDateTime? -
什么“规则”使时间戳
2020-01-12T08:30+06:00对应2020-01-12T14:30?我问是因为08:30+06:00与02:30+00:00是同一时间! -
根据偏移量,
8:30 +6z==2:30 +0z==14:30 +12z区域部分显示“这是 UTC 时间 + 无论偏移量是多少” -
我想告诉你,你想要的结果时间,与输入不对应!
标签: java date parsing time utc