“GMT标准时间”是否意味着BST?

时间:2015-03-11 15:04:53

标签: c# timezone

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

我的数据仅存储为DATE,但实际上是6PM BST。

我读了它并添加了18个小时。然后我尝试转换为UTC。我最初的理解是,转换不会考虑日光时间(因为"格林尼治标准时间标准时间"并且UTC都没有白天时间)。我想我必须在源上测试白天时间,然后进行调整。

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

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

    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");
            }

1 个答案:

答案 0 :(得分:4)

问题是Windows中的时区ID令人困惑。即使ID是" GMT标准时间",该ID引用的时区真的"英国时间" ...喜欢"欧洲/伦敦"在IANA。所以是的,它会观察DST。

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

(或者,改为使用Noda Time或类似内容,更标准的IANA time zones ...)