是否有适用于中欧的通用TimeZoneInfo

本文关键字:TimeZoneInfo 适用于 是否 | 更新日期: 2023-09-27 18:29:58

中欧是否有一个通用的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也有夏令时,根据一年中的时间,它是+1或+2。

是否有适用于中欧的通用TimeZoneInfo

首先,我想为mgnoonan使用Noda Time的回答鼓掌:)但如果你觉得不那么冒险。。。

你已经使用了正确的时区,但你不应该使用BaseUtcOffset,这是记录的,而不是关于DST:

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

当你没有为它提供DateTime来获取的偏移量时,它不可能将DST考虑在内:)

假设someDateDateTime,您可以使用:

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

或者只是ConvertTimeToUtc:

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

请注意,如果您的本地时间由于夏令时转换而出现两次,或者根本没有出现,您应该弄清楚您想做什么。

也许Noda Time可以帮你?