C# 诺达时间瞬间到CET
我使用野田佳彦时间库(v2.0.3)在.net核心项目中处理日期时间。然而;我在将瞬间转换为CET约会时间时遇到了一些问题 我对野田佳彦时间相当陌生,可能用错了(CET tz db条目不是指CET吗) 示例代码C# 诺达时间瞬间到CET,c#,.net-core,nodatime,C#,.net Core,Nodatime,我使用野田佳彦时间库(v2.0.3)在.net核心项目中处理日期时间。然而;我在将瞬间转换为CET约会时间时遇到了一些问题 我对野田佳彦时间相当陌生,可能用错了(CET tz db条目不是指CET吗) 示例代码 // get current system instant var systemInstant = SystemClock.Instance.GetCurrentInstant(); // get oslo zoneddatetime from instant var osloDate
// get current system instant
var systemInstant = SystemClock.Instance.GetCurrentInstant();
// get oslo zoneddatetime from instant
var osloDateTime = systemInstant.InZone(DateTimeZoneProviders.Tzdb["Europe/Oslo"]);
// get CET(?) zoneddatetime from instant
var cetDateTime = systemInstant.InZone(DateTimeZoneProviders.Tzdb["CET"]);
// output
Debug.WriteLine(osloDateTime.ToString());
Debug.WriteLine(cetDateTime.ToString());
上面示例代码的输出为我提供了:
2017-06-16T22:28:16 Europe/Oslo (+02)
2017-06-16T22:28:16 CET (+02)
实际上,我希望CET分区时间是21:28:16(UTC+1),而不是22:28:16(UTC+2)。UTC+1也是显示的时间 如果查看DateTimeZoneProviders.Tzdb[“CET”]的结果,它的最小偏移量为+1,最大偏移量为+2,因此我认为它指的是实际的中欧时区(包括中欧夏季时间[CEST]) 由于您选择的日期属于夏季时间范围,因此为UTC+2 如果您尝试以下操作,您将获得CET的UTC+1:
Instant.FromDateTimeUtc(new DateTime(2017, 01, 01, 12, 0, 0, DateTimeKind.Utc)).InZone(DateTimeZoneProviders.Tzdb["CET"]
如果查看DateTimeZoneProviders.Tzdb[“CET”]的结果,它的最小偏移量为+1,最大偏移量为+2,因此我认为它指的是实际的中欧时区(包括中欧夏季时间[CEST]) 由于您选择的日期属于夏季时间范围,因此为UTC+2 如果您尝试以下操作,您将获得CET的UTC+1:
Instant.FromDateTimeUtc(new DateTime(2017, 01, 01, 12, 0, 0, DateTimeKind.Utc)).InZone(DateTimeZoneProviders.Tzdb["CET"]
IANA时区数据库中
europe
文件的Zone
行包含CET
区域ID的这一行:
Zone CET 1:00 C-Eur CE%sT
然后,C-Eur
规则的结束重复是这两行:
Rule C-Eur 1981 max - Mar lastSun 2:00s 1:00 S
Rule C-Eur 1996 max - Oct lastSun 2:00s 0 -
因此,它在每年3月的最后一个星期日凌晨2点进入UTC+2,并在每年10月的最后一个星期日凌晨2点返回UTC+1
请注意,CET时区中的“缩写”在“CET”和“CEST”之间会有所不同,这可能会误导您。但野田佳彦的时间是按照IANA数据库的ID“CET”定义的
这只是避免使用缩写的另一个原因,而是使用完整的区域ID,例如明确的欧洲/奥斯陆。我建议避免尝试完全使用“CET日期时间”的概念。IANA时区数据库中
europe
文件的区域行包含CET
区域ID的这一行:
Zone CET 1:00 C-Eur CE%sT
然后,C-Eur
规则的结束重复是这两行:
Rule C-Eur 1981 max - Mar lastSun 2:00s 1:00 S
Rule C-Eur 1996 max - Oct lastSun 2:00s 0 -
因此,它在每年3月的最后一个星期日凌晨2点进入UTC+2,并在每年10月的最后一个星期日凌晨2点返回UTC+1
请注意,CET时区中的“缩写”在“CET”和“CEST”之间会有所不同,这可能会误导您。但野田佳彦的时间是按照IANA数据库的ID“CET”定义的
这只是避免使用缩写的另一个原因,而是使用完整的区域ID,例如明确的欧洲/奥斯陆。我建议不要试图完全使用“CET约会时间”的概念。谢谢,现在这一切都更有意义了。正如你所建议的,我认为是CET/CEST的差异让我困惑。谢谢,现在一切都变得更有意义了。正如你所建议的,我认为是CET/CEST的差异让我困惑。顺便说一句——如果你想要一个全年UTC+1的时区,你可以使用Etc/GMT-1
。顺便说一句——如果你想要一个全年UTC+1的时区,你可以使用Etc/GMT-1
。