首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >plusSeconds in ZonedDateTime不按预期工作

plusSeconds in ZonedDateTime不按预期工作
EN

Stack Overflow用户
提问于 2017-08-07 11:45:49
回答 1查看 517关注 0票数 2

下面是我们正在试图编码的逻辑。

我们在UTC有开始日期(SD)和结束日期(ED),我们首先将开始日期(SD_PST)转换为PST (SD_PST+),然后将开始日期和结束日期之间的差异添加到PST转换开始日期(SD_PST+(ED减去SD)),以获得ED_PST(在PST中的结束日期)。

下面是我们的部分代码。

代码语言:javascript
复制
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小时被添加)。

请帮我理解输出。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-07 13:46:32

你在评论中说 2017-03-12T3:00-07:00[PST8PDT].增加了一个小时,就可以了。嗯,这是正确的。

这是因为PST8PDT时区3月的第二个星期日凌晨2点开始。中的Dayligh节约时间(DST或夏季时间)。当时间达到2AM时,时钟向前移动1小时至3AM,偏移量从-08:00变为-07:00

取此代码:

代码语言:javascript
复制
ZonedDateTime zdt = ZonedDateTime.parse("2017-03-12T01:00-08:00[PST8PDT]");
System.out.println(zdt); // 2017-03-12T01:00-08:00[PST8PDT]
System.out.println(zdt.plusHours(1)); // 2017-03-12T03:00-07:00[PST8PDT]

产出如下:

2017-03-12T01:00-08:00PST8PDT 2017-03-12 T03:00-07:00 PST8PDT

注意,在1AM时,偏移量为-08:00。然后我加了1小时,当地时间应该改为凌晨2点。但在凌晨2点,DST启动,时钟被移动1小时前进到3 AM,偏移量改变到-07:00

如果您得到每个日期的对应Instant (所以在UTC中有相同的日期),这会变得更清楚:

代码语言:javascript
复制
ZonedDateTime zdt = ZonedDateTime.parse("2017-03-12T01:00-08:00[PST8PDT]");
System.out.println(zdt.toInstant()); // 2017-03-12T09:00:00Z
System.out.println(zdt.plusHours(1).toInstant()); // 2017-03-12T10:00:00Z

产出如下:

2017-03-12 T09:00:00 Z 2017-03-12 T10:00:00 Z

请注意,差别实际上是1小时。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45546165

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档