gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 20:47:57 26 4
gpt4 key购买 nike

我正在努力解决一个奇怪的日期时间转换问题。对于“PST 时区”,从 1973 年开始的日期按预期工作,与 UTC(冬季)相差 8 小时。但直到 1973 年,相差 9 小时!这对我来说很奇怪。也许我遗漏了什么。

以下代码:

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

输出这个输出

Original UTC: 12/30/72 8:00:00 AM

Converted: 12/29/72 11:00:00 PM

这个输出的原因是什么,如何避免?

更新:America/Dawson 更改为 America/Los_Angeles 可解决此问题。即使 timeZoneInfo 都指向 太平洋标准时间

最佳答案

For the "PST timezone"

PST 不是时区。它通常用作太平洋标准时间或 UTC-8 的缩写。如果您指的是“太平洋时间”,在 UTC-8 和 UTC-7 之间变化,那仍然不是一个真正的时区 - 尽管有从“美国/太平洋”到“美国/洛杉矶”的链接。

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

What are the reason of this output

正如您所观察到的,America/Dawson 在 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

and how to avoid this?

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

关于c# - TimeZoneInfo.ConvertTimeFromUtc 返回 1972 年的奇怪输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58809917/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com