下面是我们尝试编码的逻辑。ZonedDateTime中的plusSeconds未按预期工作
我们有UTC的startdate(SD)和enddate(ED),我们首先将startdate转换为PST(SD_PST),然后在startdate和enddate之间加上PST转换后的startdate(SD_PST +(ED减SD)) ED_PST(PST中的结束日期)
以下是我们的部分代码。
Duration duration = Duration.between(sud.getStartTime().toInstant(),
sud.getEndTime().toInstant()); // Sun Mar 12 08:00:00 PDT 2017 - [sud.getStartTime()] & Sun Mar 12 09:00:00 PDT 2017 - [sud.getEndTime()]
ZonedDateTime ldt = ZonedDateTime.ofInstant(convertToPst(sud.getStartTime()).toInstant(),
ZoneId.systemDefault()); // ldt now is 2017-03-12T1:00-08:00[PST8PDT]
ldt = ldt.plusSeconds(duration.getSeconds()); // ldt now is 2017-03-12T3:00-07:00[PST8PDT] , duration.getSeconds() is 3600
Date f2 = Date.from(ldt.toInstant()); // output Sun Mar 12 03:00:00 PDT 2017
我明白了夏令时影响输出,但我无法理解如何1小时额外添加,我的预期成果是2017-03-12T2:00-07:00[PST8PDT]
(据我所知,在DST -7小时被添加)。
请帮我理解输出。
所以我们在运行在PST时区(美国科罗拉多州丹佛市)的jvm上运行代码,使用休眠从数据库中提取startdate和enddate。基本上增加一个小时到2017-03-12T1:00-08:00 [PST8PDT]使其到2017-03-12T3:00-07:00 [PST8PDT] – Astlez
我不明白你想要做什么。你为什么不给UTC时间添加秒(“即时”)? –
此外,我强烈建议您将系统/ JVM时区设置为“America/Los_Angeles”或“America/Vancouver”,而不是“PST8PDT”。 –