Diz*_*zle 8 c# globalization timezone datetime nodatime
我在单独的循环迭代中生成两组重复事件,但在比较生成的冲突结果时发生冲突.这似乎是时候倒退,我不确定如何解决这个问题?
第一个重复事件将:
第二个重复事件将:
为了生成我每天在当地时区"Europe/Stockholm"使用Nodatime循环的事件,如下所示:
String timeZone = "Europe/Stockholm";
for (ZonedDateTime date_Local = repeatSeriesStartDate_Local; date_Local <= LoopEndDate_Local; date_Local = new ZonedDateTime(Instant.FromDateTimeUtc(date_Local.ToDateTimeUtc().AddDays(1).ToUniversalTime()),timeZone))
Run Code Online (Sandbox Code Playgroud)
我的问题出现在2016年10月29日/ 30日当时钟倒退且第二规则与第一规则冲突时. http://www.timeanddate.com/time/change/sweden/stockholm?year=2016
冲突时间如下:
我正在使用像这样的算法来测试冲突 /sf/answers/22817511/
我该如何处理这些时移的冲突?
虽然如果您能澄清这个问题确实会有帮助,但我现在会做一些假设。如果有必要,我可以稍后编辑问题。
您可能想做的是这样的:
for (LocalDate date = startDate; date <= endDate; date = date.PlusDays(1))
{
ZonedDateTime zdt = date.At(eventTime).InZone(tz, SchedulingResolver);
Console.WriteLine(zdt); // or whatever you want to do from here
}
Run Code Online (Sandbox Code Playgroud)
实现SchedulingResolver在这里,并且仅当您使用 Noda Time 1.x 版本时才需要。如果您使用的是 2.x,那么您可以直接使用InZoneLeniently(tz),因为 2.x 中宽松解析器的行为已更改为匹配(请参阅2.x 迁移指南中的“宽松解析器更改” )。
关键点是:
ZonedDateTime通常最好用作中介类型。
您有基于当地日期的每日活动,因此LocalDate更合适。
如果您的活动基于固定的 24 小时轮换(也称为 UTC 日),那么Instant会更合适。
解析器用于将不明确或无效的LocalDateTime值映射回特定时刻。我推荐用于调度目的的解析器是:
尽管正如乔恩提到的 - 您的需求可能会有所不同,而且我们实际上无法回答您应该做什么。确实有些业务需要与我推荐的规则不同的解析器规则。
| 归档时间: |
|
| 查看次数: |
171 次 |
| 最近记录: |