首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何处理将来时区倒退的问题

如何处理将来时区倒退的问题
EN

Stack Overflow用户
提问于 2015-11-03 15:25:54
回答 1查看 241关注 0票数 8

我在单独的循环迭代中生成两组重复事件,但是在比较生成的冲突结果时会出现冲突。这似乎是在时代倒退的时候,我不知道如何解决这个问题?

第一个重复事件将:

  • 在“欧洲/斯德哥尔摩”时间每天00:00至01:00重复
  • 从2015年11月3日起
  • 一直循环到永远。

第二个重复事件将:

  • 每天01:00至02:00在“欧洲/斯德哥尔摩”时间重复
  • 从2015年11月3日起
  • 再一次永远循环。

为了生成事件,我每天在当地时区“欧洲/斯德哥尔摩”中循环使用这样的Nodatime:

代码语言:javascript
复制
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))

我的问题出现在2016年10月29日/30日,当时时钟倒转,第二条规则与第一条规则发生冲突。http://www.timeanddate.com/time/change/sweden/stockholm?year=2016

冲突时间如下:

  • “2016-10-29T23:00:00 Z”至“2016-10-30T01:00:00 Z”
  • “2016-10-30 T00:00:00 Z”至“2016-10-30 T01:00:00 Z”

我使用这样的算法来测试冲突https://stackoverflow.com/a/325964/884132

我该如何处理这些时间转移的冲突?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-03 18:33:30

如果你能澄清这个问题,这真的会有帮助,但我现在要做几个假设。如果有必要,我可以稍后编辑这个问题。

你可能想做的是这样的事情:

代码语言:javascript
复制
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
}

SchedulingResolver实现是这里,只有在使用Noda的1.x版本时才有必要。如果使用的是2.x,则只需使用InZoneLeniently(tz),因为2.x中宽大解析器的行为已更改为匹配(请参阅2.x迁移指南中的“宽大解析器更改”)。

要点是:

  • ZonedDateTime通常最好用作中介类型。
代码语言:javascript
复制
- You have daily events that are based on the local day, so `LocalDate` is more appropriate.
- If you had events based on a fixed 24-hour rotation (aka, the UTC day), then `Instant` would be more appropriate.

  • 解析器用于将模糊或无效的LocalDateTime值映射回特定时刻。我推荐用于调度目的的解析器是:
代码语言:javascript
复制
- Advances by the DST bias (usually 1 hour) when the clocks go forward (spring)
- Picks the first instance when the clocks go back (fall)

虽然正如乔恩提到的--你的需求可能会有所不同,但我们真的不能回答你该做什么。的确,有些业务需要不同的解析规则,而不是我推荐的规则。

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

https://stackoverflow.com/questions/33502878

复制
相关文章

相似问题

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