我使用TimeZoneInfo类将Datetime值转换为UTC。但是,转换不会自动处理夏令时。我怎样才能做到这一点。
例如,我正在尝试将以下DateTime转换为UTC:
//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转换的,所以它不适用于我的问题。
How to use TimeZoneInfo to get local time during Daylight Savings Time?
图像Windows 10时区:
代码已经做了正确的事情并调整了夏令时。 “AUS东部标准时间”是IANA澳大利亚/悉尼地区的Windows等价物。澳大利亚/悉尼的过渡是shown in my Noda Time site,它们表明世界贸易组织4月6日下午4点(当地时间4月7日凌晨3点)从UTC + 11到UTC + 10过渡。
这意味着到4月10日 - 您要求转换的当地时间的日期 - 偏移量确实是UTC + 10,并且10/04/2019 02:00:00 UTC(am)是正确的结果。如果它给出了凌晨1点的结果(因此减去+11的UTC偏移量),那将是不正确的,因为它不会从4月6日的夏令时转换调整。