How to use TimeZoneInfo Class with daylight savings To CONVERT TO UTC
我使用TimeZoneInfo类将Datetime值转换为UTC。但是,转换不会自动处理夏令时。我怎样才能做到这一点。
例如,我正在尝试将以下DateTime转换为UTC:
1 2 3 4 5 | //meetingDate is"10/04/2019 12:00:00" PM var timeZoneId="AUS Eastern Standard Time"; DateTime dtUTC = TimeZoneInfo.ConvertTime(meetingDate, TimeZoneInfo.FindSystemTimeZoneById(timeZoneId), TimeZoneInfo.Utc); |
返回的值是:10/04/2019 02:00:00 UTC(am)
这是因为我的"AUS东部标准时间"操作系统的时区是UTC + 10:00(见下图)
但由于启用了"自动调整夏令时"设置,我能够在我的Windows 10上看到正确的时间(实际上是在这个特定时刻(2019年4月1日)UTC + 11)
如何使用TimeZoneInfo.ConvertTime方法获得相同的行为。
如果我通过值"10/04/2019 12:00:00 PM"我应该回来:10/04/2019 01:00:00 am UTC
P.S:我已经检查了以下堆栈溢出问题,但是它是从UTC转换的,所以它不适用于我的问题。
如何使用TimeZoneInfo在夏令时期间获取当地时间?
图像Windows 10时区:
代码已经做了正确的事情并调整了夏令时。"AUS东部标准时间"是IANA澳大利亚/悉尼地区的Windows等价物。 澳大利亚/悉尼的过渡点在我的Noda Time网站上显示,它们表明在UTC + 11到UTC + 10的4月6日下午4点(当地时间4月7日凌晨3点)有转换。
这意味着到4月10日 - 您要求转换的当地时间的日期 - 偏移量确实是UTC + 10,并且10/04/2019 02:00:00 UTC(am)是正确的结果。 如果它给出了凌晨1点的结果(因此减去+11的UTC偏移量),那将是不正确的,因为它不会从4月6日的夏令时转换调整。