首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DST发生时NodaTime加法

DST发生时NodaTime加法
EN

Stack Overflow用户
提问于 2014-10-29 11:54:50
回答 1查看 757关注 0票数 1

假设我的日期是2014-11-2 T00:00:00-0600,那么我想增加1天,然后有2014-11-3 T00:00:00-0700。

如果我这么做了:

代码语言:javascript
复制
crtDay.Plus(Duration.FromStandardDays(1));

crtDay是一个ZonedDateTime对象

最后是:2014-11-2T23:00-0700。

我该怎么搬到第二天?(我可以在搬到第二天之前增加几个小时,但感觉必须有更好的方法。)

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-30 17:52:27

(根据您给出的值,我假设您正在美国山区时区工作。)

“标准一天”是24小时。但是,在您提到的当天,日历日有25个小时,因为对于夏令时回退过渡来说,01:00到02:00的时间是重复的。因此,如果只增加24小时,您就会在同一天结束。

在Noda Time中,ZonedDateTime结构表示相对于时区的特定时刻。因此,您只能通过线性瞬时时间移动,使用Duration

要按日历时间移动,您必须接受它是LocalDateTime,并在其中添加一个Period。如果需要,您可以根据结果创建一个新的ZonedDateTime

代码语言:javascript
复制
ZonedDateTime nextDay = zdt.LocalDateTime.PlusDays(1).InZoneLeniently(zdt.Zone);

这里,为了方便起见,我使用InZoneLeniently。但是,您应该了解特定解析器的行为。根据您的需要,不同的解析器(或自定义的解析器)可能更合适。

比方说,你那天1:30就开始了。宽大的解析器将假定您希望在这两个事件中选择后者。基本上,您将增加25个小时,即使24小时仍然会产生相同的时钟时间。也许您的用户可能会期望您在第一次发生事件时登陆。

另外,考虑一下春向转换,如果您在2:30开始,那么您将在不存在的日期/时间登陆。宽大的解析器将提前到时区的下一个有效时钟时间--这可能是可以接受的,但它的时钟时间将不同,为2:00。您的用户可能会期望您提前一个小时,而不是仅仅在下一个有效的时钟时间。

内置的解析器正在为Noda Time v2重新考虑。见第295期这种替代实现

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

https://stackoverflow.com/questions/26629681

复制
相关文章

相似问题

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