【发布时间】:2019-12-02 17:38:10
【问题描述】:
我有航班到达时间和航班起飞时间。我必须检查飞行时间是否属于夏令时过渡(Equinox Transition)。如果时间提前,我需要增加一个小时的飞行时间,否则如果时间恢复,我需要从飞行时间中减去一个小时。
在TimeZoneInfo 类中,我们确实有IsDaylightSavingTime,但它只说明时间是否处于夏令时。
我需要检查我的时间跨度是否受到夏令时转换的影响。
Update1:在 3 月和 11 月观察到过渡,但日期每年都在变化,因此我无法对任何日期进行硬编码。我需要获取 EQUINOX 发生年份的具体日期。
Update2:日期时间是本地时间,而不是 UTC,因为航班到达和离开都来自同一个机场。
数据:
航班起飞时间:2019年3月19日23:00
航班到达时间:2019年3月20日08:00
飞行时间:7 小时,但由于 EQUINOX,它是 8 小时,因为时间提前了
2019年3月20日05:58
【问题讨论】:
-
出发和到达时间使用UTC,然后分别转换为当地时间。
-
使用 NodaTime 来做这件事怎么样?在两个
ZonedDateTimes 之间获取Duration应该很简单。 -
@ElmoDev001 我需要检查今年 EQUINOX 何时发生,然后我必须检查我的时间跨度是否处于初始状态。
-
如果你能用样本数据来具体化,那真的很有帮助。例如,我们不知道您的出发和到达时间是 本地 时间(可能不明确)还是 UTC(不能)。请注意,如果您只有当地时间,那么如果您离开或到达一个不明确的时间(在回退过渡期间),您无论如何都会丢失数据。请注意,夏令时转换通常不会发生在精确的春分 - 我会避免提及春分,除非这对您的问题非常重要,否则会令人困惑。
-
@Jackboys:不,这不安全。如果航班在 1:20 起飞并在 1:40 到达,则可能是 20 分钟或 80 分钟。从根本上说,如果一年中只有两个小时的当地时间,那么这些时间是模棱两可的。您正在丢失信息 - 就这么简单。
标签: c# asp.net .net-core timespan