中欧的通用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。
答案 0 :(得分:6)
首先,我要赞赏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);
请注意,如果由于DST转换导致本地时间出现两次,或者根本没有发生,则应该计算出您想要做的事情。
答案 1 :(得分:4)
也许Noda Time可以帮到你?