中欧是否有通用的TimeZoneInfo?

时间:2012-04-04 21:08:37

标签: c# .net datetime date

中欧的通用TimeZoneInfo是否兼顾CET和CEST?

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

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。

2 个答案:

答案 0 :(得分:6)

首先,我要赞赏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转换导致本地时间出现两次,或者根本没有发生,则应该计算出您想要做的事情。

答案 1 :(得分:4)

也许Noda Time可以帮到你?