是否有适用于中欧的通用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。
首先,我想为mgnoonan使用Noda Time的回答鼓掌:)但如果你觉得不那么冒险。。。
你已经使用了正确的时区,但你不应该使用BaseUtcOffset
,这是记录的,而不是关于DST:
获取当前时区的标准时间和协调世界时(UTC)之间的时差。
当你没有为它提供DateTime
来获取的偏移量时,它不可能将DST考虑在内:)
假设someDate
是DateTime
,您可以使用:
DateTimeOffset dto = new DateTimeOffset(someDate, tzi.GetUtcOffset(someDate));
或者只是ConvertTimeToUtc
:
var utcDate = TimeZoneInfo.ConvertTimeToUtc(someDate, tzi);
请注意,如果您的本地时间由于夏令时转换而出现两次,或者根本没有出现,您应该弄清楚您想做什么。
也许Noda Time可以帮你?