【发布时间】:2012-07-03 19:25:26
【问题描述】:
在时区之间转换时,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 有点警惕。
【问题讨论】:
-
你知道伦敦不是格林威治标准时间,对吧?由于现在是北半球的夏天,伦敦是 UTC+1,而你是 UTC+2。
-
看看我的问题是什么?我不想将其标记为 BST(这是当前时间),因为当它不再是 BST 时,它会返回到 GMT。我希望它是自动的。我讨厌时区。
-
幸运的是,它会在夏季自动使用 BST,在冬季自动使用 GMT。你说得对,
TimeZone有问题,但这就是TimeZoneInfo的创建。 -
一个问题是某些时区在 Windows 和 .net 中的名称真的很奇怪。例如
Europe/London被误命名为GMT Standard Time并在夏季和冬季时间之间切换。但 GMT 没有,在 .net 中称为Greenwich Standard Time。 stackoverflow.com/questions/2292334/… -
计时是一本完全该死的教科书,如果你想完全正确的话。微软甚至没有为以色列尝试,因为每年都有四十种左右的宗教 DST 变化(不能仅仅因为夏令时而在错误的时间庆祝,耶和华可能会让他的鼻子失去关节并开始打击!我无法理解像以色列这样精通技术的国家怎么会如此愚蠢,但事实就是如此。)GMT(格林威治标准时间)与 UTC(通用时间公约)几乎但不完全相同,与恒星时间几乎但不完全相同时间。这是混乱!