在时区之间进行转换时,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;
Run Code Online (Sandbox Code Playgroud)
它目前运作良好.然而,当DST出现丑陋的头脑时,它会继续工作还是会破坏它?由于过去遇到过很多问题,我对TimeZones有点警惕.
简短的回答是“不是到处都是,也不是完美的”。
TimeZoneInfo.GetAdjustmentRules 将为您提供有关 DST 偏移量更改以及这些更改何时生效和失效的规则集合。
但是,您的用户仍然可以通过取消选中 Windows 控制面板日期和时间中的“自动调整夏令时”来搞砸事情。如果在 Windows 中关闭 DST,那么您将得到一个空的调整规则集合。
如果您希望自动应用调整规则,则必须使用已设置 DateTimeKind 的 DateTime 对象。如果 DST 关闭,转换中将遵循这一点。
GMT 是格林威治皇家天文台的太阳时。英国人发明了时区从日期变更线偏移的整个业务,因为他们是第一个在全球范围内协调任何事情的人。在昔日的太平日子里,他们拥有一支遍布全球的帆船海军,但没有无线电。订单的滞后时间为数周或数月,因此一致、精确的全球计时是由唯一拥有比行星更大的参照系的人——皇家天文学家发明的。
月球的潮汐力正在减慢地球的自转。需要大量的汁液才能使海洋中的水上下晃动,这不是魔法,它来自地球的自转时刻。
此外,太阳轨道的持续时间也不是恒定的,因此我们时不时地会有闰秒来使日历与行星现实同步。另一方面,恒星时则没有这样的愚蠢之处,所以我们逐渐远离它。然后是相对论漂移。GPS 卫星移动速度如此之快,实际上必须补偿轻微的时间扭曲。