中欧是否有通用的TimeZoneInfo?

Jon*_*ski 11 .net c# 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;
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*eet 7

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

您已经使用了正确的时区 - 但您不应该使用BaseUtcOffset哪些文档不是关于DST:

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

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

假设someDate是a DateTime,你可以使用:

DateTimeOffset dto = new DateTimeOffset(someDate, tzi.GetUtcOffset(someDate));
Run Code Online (Sandbox Code Playgroud)

或者只是ConvertTimeToUtc:

var utcDate = TimeZoneInfo.ConvertTimeToUtc(someDate, tzi);
Run Code Online (Sandbox Code Playgroud)

请注意,如果由于DST转换导致本地时间发生两次,或者根本不发生,则应该计算出您要执行的操作.


mgn*_*nan 5

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