如何预测世界时
本文关键字:世界 何预测 | 更新日期: 2023-09-27 18:30:31
有一个关于ToUniversalTime如何工作的相关问题。但是关于时间转换的相关信息告诉我,过去有时间转换的相关数据库。我的问题是ToUniversalTime
如何预测并知道 2070 年 DST 何时会发生变化?
例如,
ToUniversalTime
如何预测并知道 2070 年 DST 何时会发生变化?
不能。 它对我们世界各国政府将决定如何处理其时区的未来没有任何特别的见解。
世界上任何本地时间都由每个地方根据自己的标准设置的时区规则决定。 这些总是由于各种原因而变化,无论是实际的、政治的还是宗教的。 在这方面,没有一个包罗万象的国际管理机构,也没有任何规则是他们必须遵守的。
在实践中,大多数政府在进行这些更改时往往会发出一些通知。 通常他们至少要一年。 例如,美国在2005年宣布,这些变化将于2007年生效。
但情况并非总是如此。 例如,在2011年的埃及,夏令时在计划生效前9天被取消。
所有这些变化都由我们在计算中使用的两个常见时区数据库跟踪和捕获。 您可以在时区标签维基中阅读这些内容。 短时间内的更改意味着每个人都必须争先恐后地匆忙获取更新,否则可能会冒着数据不准确的风险。
因此,回到问题的核心 - 在安排未来活动时,您需要知道预期的上下文是什么。 如果它是以UTC格式提供给您的,那么您可以明确地知道它将在哪个时刻发生(忽略闰秒)。 但大多数时候,你会得到一个本地时间和时区。 如果是将来的日期,则必须保留这两个值。 您无法预测未来的 UTC 转换,而不会有更改的风险。
只有在日期过后,您才能确保转换的稳定性。 但是,您如何安排任何内容来实际触发代码中的事件呢? 好吧,一种方法是在接近大致事件时间之前不要尝试进行转换。 也许一周的窗口是可以接受的。 另一种方法是立即转换所有内容,但保留原始数据。 每当您获得更新的时区信息时,您都可以重新计算转化。 哎呀,为了安全起见,您可以随时重新计算转换。 这仅取决于您的应用要求。
顺便说一句,由于这是一个 .NET/C# 问题,并且您说您在土耳其,我强烈建议您考虑使用 Noda 时间和 IANA 时区Europe/Istanbul
。 这只是一个例子:
LocalDateTime ldt = new LocalDateTime(2013, 09, 17, 0, 0);
DateTimeZone tz = DateTimeZoneProviders.Tzdb["Europe/Istanbul"];
ZonedDateTime zdt = ldt.InZoneLeniently(tz);
Instant utc = zdt.ToInstant();
Debug.WriteLine(utc); // 2013-09-16T21:00:00Z
如果您对TZDB对土耳其时间变化的了解程度感兴趣,请查看此处。 相比之下,如果您在 HKEY_LOCAL_MACHINE'SOFTWARE'Microsoft'Windows NT'CurrentVersion'Time Zones'Turkey Standard Time'Dynamic DST
的 Windows 注册表中查看,您会发现 Windows 只知道自 2010 年以来土耳其的变化。