Java 时间:加上 UTC 日期/时间的天数会更改小时

问题描述 投票:0回答:1

考虑以下因素:

import java.time.*;
var today = Instant.now();
var futureDay1 = today.atZone(ZoneId.systemDefault()).plusDays(1428826726);
var futureDay2 = today.atZone(ZoneOffset.UTC).plusDays(1428826726).withZoneSameInstant(ZoneId.systemDefault());

ZoneId.systemDefault()
欧洲/罗马时区。

最后,如下:

futureDay1 ==> +3914019-03-19T16:42:44.377406+01:00[Europe/Rome]
futureDay2 ==> +3914019-03-19T15:42:44.377406+01:00[Europe/Rome]

所以,futureDay2 晚了一小时。我无法解释自己为什么。当前时间(下午 4 点)不存在 DST 风险,那么为什么会发生这种情况呢? 当然,添加任何天数都不会发生这种情况。 这不仅仅是一个表示问题:如果将两者从纪元转换为毫秒,这两个值实际上是两个不同的时刻,因此是不同的长值。

java java-time
1个回答
0
投票

但这是一个夏令时问题。您最终所在年份的日期相对于您运行此命令的当前日期/日期,您所使用的时区存在 DST 更改,这意味着该天比 UTC 中的同一天更长或更短。对于此后的任何日期(直到夏令时切换回来),您都会看到此偏移量。

© www.soinside.com 2019 - 2024. All rights reserved.