UTC转换为中欧标准时间前面2小时而不是1

时间:2016-08-15 13:05:16

标签: c# datetime timezone

我试图理解为什么我的约会错了:

DateTime databaseUtcTime = new DateTime(2016, 8, 15, 10, 20, 0, DateTimeKind.Utc);
var timeZone = TimeZoneInfo.FindSystemTimeZoneById("Central Europe Standard Time");
var testDateTime = TimeZoneInfo.ConvertTimeFromUtc(databaseUtcTime, timeZone);

testDateTime 输出 15/08/2016 12:20:00 而不是 15/08/2016 11:20:00 这是为什么?不应该是从UTC前进1小时,而不是2?

修改----

感谢Jon Skeet,

如果这有助于任何人,我使用:

if(testDateTime.IsDaylightSavingTime())
{
    testDateTime = testDateTime.AddHours(-1);
}

虽然您不了解上下文,但这有助于了解如何在按时运行某些明确测试时摆脱夏令时。

1 个答案:

答案 0 :(得分:3)

ID为“中欧标准时间”的时区只是中欧使用的时区... 意味着标准时间。

由于中欧目前正在观察夏令时,因此偏移实际上是UTC + 2。

非常不幸的是,Windows时区中使用的ID会像这样误导......但TimeZoneInfo实现本身是正确的。

(对于Windows时区名称来说,这不是全部错误...有关此问题,请参阅Matt Johnson's发布的内容......)