我有一个时区信息中欧标准时间,显示UTC +01:00,当我执行代码时,它显示时间前 2 小时而不是 1 小时。下面是示例代码
static void Main(string[] args)
{
var strTimeZoneInfo = "Central Europe Standard Time";
var datetimeDST = Convert.ToDateTime("2019-07-18 18:17:00");
var timeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById(strTimeZoneInfo);
var dtUTC= TimeZoneInfo.ConvertTimeToUtc(datetimeDST, timeZoneInfo);
Console.WriteLine(Convert.ToString(dtUTC));
Console.ReadKey();
}
因此,我得到的不是2019-07-18 17:17:00,而是2019-07-18 16:17:00。有人可以解释如何在不使用 Noda 或其他外部库的情况下解决此问题。
参考以下链接,但不清楚如何解决此问题。
- UTC 转换为中欧标准时间是前面 2 小时而不是 1 小时
- 是否有适用于中欧的通用时区信息?
还提到了此链接的答案,但它不起作用。
尽管"中欧标准时间"是该TimeZoneInfo
的Id
属性,但它实际上处理该时区内的标准时间和夏令时,具体取决于您谈论的日期。我知道这很令人困惑,因为时区信息在显示名称中包含"UTC+01:00",即使它目前处于夏令时。
但在这种情况下,您给出的日期是在夏令时期间,因此偏移量应该是 +02:00
,而不是+01:00
。库正在生成正确的结果。
var strTimeZoneInfo = "Central Europe Standard Time";
var datetimeDST = Convert.ToDateTime("2019-07-18 18:17:00");
var timeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById(strTimeZoneInfo);
Console.WriteLine(timeZoneInfo.DisplayName);
Console.WriteLine(timeZoneInfo.StandardName);
Console.WriteLine(timeZoneInfo.DaylightName);
Console.WriteLine(timeZoneInfo.IsDaylightSavingTime(datetimeDST));
Console.WriteLine(timeZoneInfo.GetUtcOffset(datetimeDST));
var dtUTC = TimeZoneInfo.ConvertTimeToUtc(datetimeDST, timeZoneInfo);
Console.WriteLine(dtUTC.ToString(CultureInfo.InvariantCulture));
输出:
(UTC+01:00( 贝尔格莱德, 布拉迪斯拉发, 布达佩斯, 卢布尔雅那, 布拉格
中欧标准时间
中欧夏令时
真
02:00:00
2019-07-18 16:17:00