C# 诺达时间瞬间到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

我使用野田佳彦时间库(v2.0.3)在.net核心项目中处理日期时间。然而;我在将瞬间转换为CET约会时间时遇到了一些问题

我对野田佳彦时间相当陌生,可能用错了(CET tz db条目不是指CET吗)

示例代码

// 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