SetDynamicTimeZoneInformation如何与偏见

时间:2017-07-05 09:00:59

标签: c# .net timezone dst

我有一段代码试图在Windows(嵌入式7)上禁用夏令时,但是我想到了一种奇怪的方式(我认为)。不幸的是,代码是由其他很久以前离开的人编写的,我不确定他们想要做什么。

        DynamicTimeZoneInformation timeZoneInfo;
        GetDynamicTimeZoneInformation(out timeZoneInfo);
        timeZoneInfo.DisableDynamicDaylightTime();

        // Disable windows daylight saving time.
        DateTimeOffset ptime = DateTimeOffset.Now;
        bool enabled = SecurityApi.EnablePrivilege("SeTimeZonePrivilege");
        bool changed = SetDynamicTimeZoneInformation(ref timeZoneInfo);
        bool disabled = SecurityApi.DisablePrivilege("SeTimeZonePrivilege");
        TimeZoneInfo.ClearCachedData();

和...

      public void DisableDynamicDaylightTime()
        {
            this.DynamicDaylightTimeDisabled = true;
            this.Bias = 0;
            this.StandardDate.Year = 0;
            this.StandardDate.Month = 0;
            this.StandardDate.Day = 0;
            this.StandardDate.Hour = 0;
            this.StandardDate.Minute = 0;
            this.StandardDate.Second = 0;
            this.StandardDate.Milliseconds = 0;
            this.StandardDate.DayOfWeek = 0;
            this.StandardBias = 0;
            this.DaylightDate.Year = 0;
            this.DaylightDate.Month = 0;
            this.DaylightDate.Day = 0;
            this.DaylightDate.Hour = 0;
            this.DaylightDate.Minute = 0;
            this.DaylightDate.Second = 0;
            this.DaylightDate.Milliseconds = 0;
            this.DaylightDate.DayOfWeek = 0;
            this.DaylightBias = 0;
        }

现在,稍后会有代码通过将偏移量添加到Utc Time来将时钟更改回本地时区,但这不是我的问题所在。

我的问题是这个。假设我将时区(通过Windows)设置为巴格达,即UTC + 3:00。当前时间11:00当我得到时区信息时,它的Bias为-180,StandardBias为-60。上面的代码将Biases设置为0,然后我调用SetDynamicTimeZoneInformation()。正如预期的那样,时间设置回到08:00(因为偏差现在为0)。

然而,当它到达TimeZoneInfo.ClearCachedData()时,它将UTC时间(即DateTimeOffset.Now.UtcDateTime)设置为05:00!再过3个小时。我原本期望UTC时间和当前显示的系统时间相同,因为偏差为0。

这是SetDynamicTimeZoneInformation()的预期行为吗?这似乎更奇怪,因为我有另一个项目,该部分具有相同的代码,但不执行此操作 - 它的行为与我在上一段中的预期相同。 (因此UTC时间将保持在08:00)

我能看到的唯一区别就是使用.Net Framework v3.5,而这个是v4.0

0 个答案:

没有答案