18

是否存在将 CET 和 CEST 合二为一的中欧通用 TimeZoneInfo?

我有一个应用程序正在执行以下操作:

TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById("Central European Standard Time"); 
DateTimeOffset dto = new DateTimeOffset(someDate, tzi.BaseUtcOffset);
var utcDate = dto.ToUniversalTime().DateTime;

问题是这会返回错误的 utcDate,因为 BaseUtcOffset 是 +1 而不是 +2。CET 似乎也有 DST,并且根据一年中的时间是 +1 或 +2。

4

2 回答 2

11

首先,我想赞扬 mgnoonan 使用 Noda Time 的回答 :) 但如果你感觉不那么冒险......

您已经使用了正确的时区 - 但您不应该使用BaseUtcOffset记录为与 DST 无关的时区:

获取当前时区的标准时间与协调世界时 (UTC) 之间的时差。

DateTime当您不提供它来获取偏移量时,它不可能考虑 DST :)

假设someDateDateTime,您可以使用:

DateTimeOffset dto = new DateTimeOffset(someDate, tzi.GetUtcOffset(someDate));

或者只是ConvertTimeToUtc

var utcDate = TimeZoneInfo.ConvertTimeToUtc(someDate, tzi);

请注意,如果您的当地时间由于 DST 转换而出现两次,或者根本不出现,您应该计算出您想要做什么。

于 2012-04-04T21:21:59.020 回答
4

也许野田时间可以帮助你?

于 2012-04-04T21:11:08.137 回答