假设我的日期是2014-11-2 T00:00:00-0600,那么我想增加1天,然后有2014-11-3 T00:00:00-0700。
如果我这么做了:
crtDay.Plus(Duration.FromStandardDays(1));crtDay是一个ZonedDateTime对象
最后是:2014-11-2T23:00-0700。
我该怎么搬到第二天?(我可以在搬到第二天之前增加几个小时,但感觉必须有更好的方法。)
谢谢。
发布于 2014-10-30 17:52:27
(根据您给出的值,我假设您正在美国山区时区工作。)
“标准一天”是24小时。但是,在您提到的当天,日历日有25个小时,因为对于夏令时回退过渡来说,01:00到02:00的时间是重复的。因此,如果只增加24小时,您就会在同一天结束。
在Noda Time中,ZonedDateTime结构表示相对于时区的特定时刻。因此,您只能通过线性瞬时时间移动,使用Duration。
要按日历时间移动,您必须接受它是LocalDateTime,并在其中添加一个Period。如果需要,您可以根据结果创建一个新的ZonedDateTime。
ZonedDateTime nextDay = zdt.LocalDateTime.PlusDays(1).InZoneLeniently(zdt.Zone);这里,为了方便起见,我使用InZoneLeniently。但是,您应该了解特定解析器的行为。根据您的需要,不同的解析器(或自定义的解析器)可能更合适。
比方说,你那天1:30就开始了。宽大的解析器将假定您希望在这两个事件中选择后者。基本上,您将增加25个小时,即使24小时仍然会产生相同的时钟时间。也许您的用户可能会期望您在第一次发生事件时登陆。
另外,考虑一下春向转换,如果您在2:30开始,那么您将在不存在的日期/时间登陆。宽大的解析器将提前到时区的下一个有效时钟时间--这可能是可以接受的,但它的时钟时间将不同,为2:00。您的用户可能会期望您提前一个小时,而不是仅仅在下一个有效的时钟时间。
https://stackoverflow.com/questions/26629681
复制相似问题