我试图理解为什么我的约会错了:
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);
}
虽然您不了解上下文,但这有助于了解如何在按时运行某些明确测试时摆脱夏令时。
答案 0 :(得分:3)
ID为“中欧标准时间”的时区只是中欧使用的时区... 意味着标准时间。
由于中欧目前正在观察夏令时,因此偏移实际上是UTC + 2。
非常不幸的是,Windows时区中使用的ID会像这样误导......但TimeZoneInfo
实现本身是正确的。
(对于Windows时区名称来说,这不是全部错误...有关此问题,请参阅Matt Johnson's发布的内容......)