在时区之间转换时,C# 是否考虑了夏令时?

我有一个位于伦敦当前时间的源日期,我想将其转换为我的时区 (CET)。这是我正在使用的代码。

DateTime time = DateTime.ParseExact(timeString, "HH:mm", null);
time = DateTime.SpecifyKind(time, DateTimeKind.Unspecified);

//Convert it to the right timezone. It is currently in GMT

TimeZoneInfo gmt = TimeZoneInfo.FindSystemTimeZoneById("GMT Standard Time");
TimeZoneInfo current = TimeZoneInfo.Local;

DateTime utc = TimeZoneInfo.ConvertTimeToUtc(time, gmt);
DateTime local = TimeZoneInfo.ConvertTimeFromUtc(utc, core.startTime = local;

目前运行良好。然而,当 DST 抬起它丑陋的脑袋时,它会继续工作还是会严重崩溃?由于过去有很多问题,我对 TimeZones 有点警惕。

最佳答案

TimeZoneInfo.GetAdjustmentRules 将为您提供有关 DST 偏移更改以及它们何时生效和失效的规则集合。

但是,您的用户仍然可以通过取消选中 Windows 控制面板日期和时间中的“自动调整夏令时”来解决问题。如果在 Windows 中关闭了 DST,那么您将获得一个空的调整规则集合。

如果您想自动应用调整规则,您必须使用已设置 DateTimeKind 的 DateTime 对象。如果 DST 关闭,这将在转换中得到遵守。

GMT 是格林威治皇家天文台的太阳时。英国人发明了从日期变更线偏移时区的整个业务,因为他们是第一个在全局范围内协调任何事情的人。在过去的 Restful 日子里,他们拥有遍布全局的帆船海军,但没有 radio 。订单延迟数周或数月,因此一致、精确、全局计时是由唯一拥有比行星大的引用系的人发明的——皇家天文学家。

月球的潮汐力正在减慢地球的自转速度。上下晃动海洋需要大量的果汁,这不是魔法,它来自地球的自转时刻。

此外,太阳轨道的持续时间也不是恒定的,所以我们不时有闰秒来将日历与行星现实同步。另一方面,恒星时间没有这样的愚蠢,所以我们逐渐远离它。然后是相对论漂移。 GPS 卫星移动如此之快,以至于实际上必须补偿轻微的时间扭曲。

关于c# - TimeZoneInfo 是否考虑了夏令时?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11309631/

10-14 22:55