"GMT Standard Time"意味着BST吗?



我对"GMT标准时间"感到困惑。

我有仅存储为 DATE 的数据,但实际上是英国夏令时下午 6 点。

我读了它并增加了 18 小时。然后我尝试转换为 UTC。我最初的理解是转换不会考虑夏令时(因为"GMT 标准时间"和 UTC 都没有夏令时)。我以为我必须在源上测试日光时间,然后进行调整。

但是,转换时间似乎知道源中的夏令时并进行适当的更改。

这对我来说似乎很奇怪 - 这是预期的行为吗?

    TimeZoneInfo gmtZone = TimeZoneInfo.FindSystemTimeZoneById("GMT Standard Time");
    TimeZoneInfo utcZone = TimeZoneInfo.FindSystemTimeZoneById("UTC");
    public static CultureInfo ci = CultureInfo.InvariantCulture;

            string SomeDT = "27/01/2000"; //First BST day
            var sourceDT = DateTime.ParseExact(SomeDT, "dd/MM/yyyy", ci).AddHours(18); 
            var utcDT = TimeZoneInfo.ConvertTime(sourceDT, gmtZone, utcZone);
            // At this point utcDT has already been changed so test below is redundant. 
            // That Suggest "GMT Standard Time" is actually "Daylight Time" i.e.BST
            if (gmtZone.IsDaylightSavingTime(sourceDT))
            {
                utcDT = utcDT.AddHours(-1);
            }
            else
            {
                Console.WriteLine("Not BST");
            }

问题是 Windows 中的时区 ID 令人困惑。即使 ID 是"GMT 标准时间",该 ID 所指的时区实际上是"英国时间"......比如 IANA 中的"欧洲/伦敦"。所以是的,它将遵守夏令时。

如果您想要真正的 UTC,只需使用 TimeZoneInfo.Utc .

(或者,改用野田时间或类似的东西,以及更标准的 IANA 时区......

相关内容

  • 没有找到相关文章