c# - 几个时区(欧洲/尼科西亚)的 DST 进入时间使用 System.Globalization C# 报告错误的日期
问题描述
我正在尝试使用 C# 中的 System.Globalization 类获取 2020 年时区“Antarctica/McMurdo”的 DST 进入时间。我把它们当作
DST Entry Time: 9/29/2020 2:00:00 AM
DST Exit Time: 4/5/2020 2:59:59 AM
但根据https://www.timeanddate.com/time/change/antarctica/mcmurdo ,实际 DST 进入时间应该是 9/27/2020 2:00:00 AM
收到的进入时间已经在 DST 中,因此我的测试程序失败了,因为时间偏移没有发生。
下面是使用的代码片段
var currTimeZone = TimeZone.CurrentTimeZone;
var dstInfo = currTimeZone.GetDaylightChanges(now.Year);
DSTEntry = dstInfo.Start.ToString();
以下是我正在运行的 Mono 和 Ubuntu 的版本
Ubuntu 16.04.3 LTS
Mono JIT 编译器版本 5.4.0.201
这是zdump的输出
$ zdump 南极洲/麦克默多 -v 2019,2022
南极洲/麦克默多 2019 年 4 月 6 日星期六 13:59:59 UT = 2019 年 4 月 7 日星期日 02:59:59 NZDT isdst=1 gmtoff=46800
南极洲/麦克默多 2019 年 4 月 6 日星期六 14:00:00 UT = 2019 年 4 月 7 日星期日 02:00:00 NZST isdst=0 gmtoff=43200
南极洲/麦克默多 2019 年 9 月 28 日星期六 13:59:59 UT = 2019 年 9 月 29 日星期日 01:59:59 NZST isdst=0 gmtoff=43200
南极洲/麦克默多 2019 年 9 月 28 日星期六 14:00:00 UT = 2019 年 9 月 29 日星期日 03:00:00 NZDT isdst=1 gmtoff=46800
南极洲/麦克默多 2020 年 4 月 4 日星期六 13:59:59 UT = 2020 年 4 月 5 日星期日 02:59:59 NZDT isdst=1 gmtoff=46800
南极洲/麦克默多 2020 年 4 月 4 日星期六 14:00:00 UT = 2020 年 4 月 5 日星期日 02:00:00 NZST isdst=0 gmtoff=43200
南极洲/麦克默多 2020 年 9 月 26 日星期六 13:59:59 UT = 2020 年 9 月 27 日星期日 01:59:59 NZST isdst=0 gmtoff=43200
南极洲/麦克默多 2020 年 9 月 26 日星期六 14:00:00 UT = 2020 年 9 月 27 日星期日 03:00:00 NZDT isdst=1 gmtoff=46800
南极洲/麦克默多 2021 年 4 月 3 日星期六 13:59:59 UT = 2021 年 4 月 4 日星期日 02:59:59 NZDT isdst=1 gmtoff=46800
南极洲/麦克默多 2021 年 4 月 3 日星期六 14:00:00 UT = 2021 年 4 月 4 日星期日 02:00:00 NZST isdst=0 gmtoff=43200
南极洲/麦克默多 2021 年 9 月 25 日星期六 13:59:59 UT = 2021 年 9 月 26 日星期日 01:59:59 NZST isdst=0 gmtoff=43200
南极洲/麦克默多 2021 年 9 月 25 日星期六 14:00:00 UT = 2021 年 9 月 26 日星期日 03:00:00 NZDT isdst=1 gmtoff=46800
有人可以帮我解决这个时间问题吗?或者这是来自 C# 正在读取的 DLL/timezone_database 的错误?
谢谢
解决方案
从类的文档中TimeZone
:
警告
此 API 现在已过时
...
ⓘ 重要
尽可能使用
TimeZoneInfo
类而不是TimeZone
类。
...
该类
TimeZone
仅支持本地时区的单一夏令时调整规则。因此,TimeZone
该类可以准确地报告夏令时信息或仅在最新调整规则生效期间在 UTC 和本地时间之间进行转换。相比之下,TimeZoneInfo
该类支持多个调整规则,这使得处理历史时区数据成为可能。
简而言之,不要使用TimeZone
class。
推荐阅读
- mysql - 有没有更优雅的方法来查询多个 OR 和 AND 上的多对多表?
- java - Eclipse - “不兼容的 JVM。JVM 版本 1.8.0_261 不适合此产品。版本:需要 11 或更高版本”
- c++ - 是否可以保证一个类型的多个 type_index 实例比较相等?
- python - Pandas:从带有猜测分隔符的“tsv”文件中提取的不规则 dataframe.colums
- java - 如何使用 kotlin 检测 java 文件方法体的结尾?
- qt - 如何判断 QPlainTextEdit 是否滚动?
- javascript - 问题.js | 修复 applyForce 的更新问题
- flutter - Flutter - Clipping Path 曲线非常锐利
- java - 找不到书面方法 java.util.function 的符号
- outlook - NVDA 未在 Outlook 中读取带有背景图像的文本