是否有针对中欧的通用 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。
首先,我想赞扬 mgnoonan 使用野田时间的回答:)但是如果你感觉不太冒险......
BaseUtcOffset
,这是 记录 与 DST 无关:
获取当前时区标准时间与协调世界时 (UTC) 之间的时差。
当您不提供
DateTime
来获取偏移量时,它不可能考虑 DST :)
假设
someDate
是 DateTime
,你可以使用:
DateTimeOffset dto = new DateTimeOffset(someDate, tzi.GetUtcOffset(someDate));
ConvertTimeToUtc
:
var utcDate = TimeZoneInfo.ConvertTimeToUtc(someDate, tzi);
请注意,如果您的本地时间由于夏令时转换而出现两次,或者根本没有出现,您应该弄清楚您想要做什么。
也许野田时间可以帮助你?
使用.Net Core参考ConvertTimeToUtc(DateTime, TimeZoneInfo)
// Get Current Central European Standard Time
DateTime thisTime = DateTime.Now;
TimeZoneInfo cet = TimeZoneInfo.FindSystemTimeZoneById("Central European Standard Time");
DateTime cetTime = TimeZoneInfo.ConvertTime(thisTime, TimeZoneInfo.Local, cet);
Console.WriteLine("Time in {0} zone: {1}", cet.IsDaylightSavingTime(cetTime) ? cet.DaylightName : cet.StandardName, cetTime);
// Output:
// Time in Central European Standard Time zone: 08-03-2024 05:26:03