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

本文关键字:2小时 UTC 标准时间 转换 | 更新日期: 2023-09-27 18:02:23

我想知道为什么我的约会对象错了:

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);
}

尽管您不知道上下文,但这对于了解如何在按时运行某些显式测试时摆脱日光节约时间是有帮助的。

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

时区ID为"中欧标准时间"的就是中欧使用的时区…并不等于标准时间

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

很不幸,Windows时区中使用的id像这样具有误导性…但TimeZoneInfo实现本身是正确的。

(这并不是Windows时区名称的全部错误…查看Matt Johnson关于此事的帖子…)