【发布时间】:2014-10-22 22:30:06
【问题描述】:
在运行代码的系统上设置的时区中,获取代表当天开始和结束的 ZonedDateTime(s) 的正确和更简洁的方法是什么?
下面的代码是不是太复杂了?
ZonedDateTime nowInZone = SystemClock.Instance.Now.InZone(DateTimeZoneProviders.Bcl.GetSystemDefault());
ZonedDateTime start = new LocalDateTime(nowInZone.Year, nowInZone.Month, nowInZone.Day, 0, 0, 0).InZoneStrictly(DateTimeZoneProviders.Bcl.GetSystemDefault());
ZonedDateTime end = new LocalDateTime(nowInZone.Year, nowInZone.Month, nowInZone.Day, 23, 59, 59).InZoneStrictly(DateTimeZoneProviders.Bcl.GetSystemDefault());
鉴于这些值,我需要测试它们之间是否有另一个 ZonedDateTime。
【问题讨论】:
-
您可能想改用
InZoneLeniently。例如,巴西在 DST 向前过渡时,从晚上 11:59 到凌晨 1 点。没有中午 12:00。InZoneStrictly会在这种情况下抛出。InZoneLeniently在转换 12am 的 LocalDateTime 时会转到 1am(如果我正确阅读了文档)。同样,在向后过渡时,它从晚上 11 点 59 分到晚上 11 点。晚上 11 点 59 分有两个。InZoneLeniently选择后一个。 -
@mikez - 关于巴西的好点子。我演示的方法已经涵盖了这一点。谢谢。