中欧有通用的时区信息吗?

问题描述 投票:0回答:3

是否有针对中欧的通用 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。

c# .net datetime date
3个回答
14
投票

首先,我想赞扬 mgnoonan 使用野田时间的回答:)但是如果你感觉不太冒险......

您已经使用了正确的时区 - 但您不应该使用

BaseUtcOffset
,这是 记录 与 DST 无关:

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

当您不提供

DateTime
来获取偏移量时,它不可能考虑 DST :)

假设

someDate
DateTime
,你可以使用:

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

或者只是

ConvertTimeToUtc
:

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

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


5
投票

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


0
投票

使用.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
© www.soinside.com 2019 - 2024. All rights reserved.