TimeZoneInfo.ConvertTimeFromUtc返回1972年的奇怪输出

我正在努力解决一个奇怪的DateTime转换问题。对于“ PST时区”,1973年开始的日期按预期工作,与UTC(冬季)相差8小时。但是到1973年,相差9个小时!这对我来说很奇怪。也许我想念一些东西。

以下代码:

        var time = new DateTime(1972,12,30,8,DateTimeKind.Utc);
        var timeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("America/Dawson");
        var converted = TimeZoneInfo.ConvertTimeFromUtc(time,timeZoneInfo);
        Console.WriteLine($"Original UTC: {time}");
        Console.WriteLine($"Converted: {converted}");

输出此输出

  

原始UTC:12/30/72 8:00:00

     

已转换:12/29/72 11:00:00 PM

此输出的原因是什么,如何避免这种情况?

更新: 从America/Dawson更改为America/Los_Angeles可解决此问题。即使两个timeZoneInfo都指向pacific standard time

yicaoyimu_ye 回答:TimeZoneInfo.ConvertTimeFromUtc返回1972年的奇怪输出

  

“ PST时区”

PST不是时区。通常用作太平洋标准时间(UTC-8)的缩写。如果您的意思是“太平洋时间”,在UTC-8和UTC-7之间变化,那实际上仍然不是一个时区-尽管存在从“美国/太平洋”到“美国/洛杉矶”的链接。

问题实际上是:执行转换时,您对哪个精确位置感兴趣?当前认为自己处于“太平洋时间”的美国不同地区,在历史上遵循着不同的规则-这就是为什么您看到这种行为的原因。

  

此输出的原因是什么

如您所见,美国/道森在1965年至1973年之间的UTC-9偏移量。基本上,您正在观察现实-这不是您所期望的。

您可以看到1900年到2035年之间的所有过渡here-使用的是IANA 2019c数据。

source data for America/Dawson也表明了这一点:

Zone America/Dawson -9:17:40 -  LMT 1900 Aug 20
            -9:00   NT_YK   Y%sT    1973 Oct 28  0:00
            -8:00   NT_YK   P%sT    1980
            -8:00   Canada  P%sT

这表明在1900年到1973年之间,它使用的是NT_YK规则,该规则定义为just above

# Rule  NAME    FROM    TO  TYPE    IN  ON  AT  SAVE    LETTER/S
Rule    NT_YK   1918    only    -   Apr 14  2:00    1:00    D
Rule    NT_YK   1918    only    -   Oct 27  2:00    0   S
Rule    NT_YK   1919    only    -   May 25  2:00    1:00    D
Rule    NT_YK   1919    only    -   Nov  1  0:00    0   S
Rule    NT_YK   1942    only    -   Feb  9  2:00    1:00    W # War
Rule    NT_YK   1945    only    -   Aug 14  23:00u  1:00    P # Peace
Rule    NT_YK   1945    only    -   Sep 30  2:00    0   S
Rule    NT_YK   1965    only    -   Apr lastSun 0:00    2:00    DD
Rule    NT_YK   1965    only    -   Oct lastSun 2:00    0   S
Rule    NT_YK   1980    1986    -   Apr lastSun 2:00    1:00    D
Rule    NT_YK   1980    2006    -   Oct lastSun 2:00    0   S
Rule    NT_YK   1987    2006    -   Apr Sun>=1  2:00    1:00    D
  

以及如何避免这种情况?

选择一个具有您要观察的规则的时区,请注意,仅仅因为两个时区具有相同的当前规则和未来规则,并不意味着它们具有相同的规则过去的规则。

本文链接:https://www.f2er.com/3120822.html

大家都在问