我正在使用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/4/2019 01:00:00 UTC
P.S:我已经检查了以下堆栈溢出问题,但是它是从UTC转换而来的,因此不适用于我的问题。
How to use TimeZoneInfo to get local time during Daylight Savings Time?
图像Windows 10时区:
答案 0 :(得分:1)
该代码已经在做正确的事情,并针对夏令时进行了调整。 “ AUS东部标准时间”是Windows等同于IANA澳大利亚/悉尼地区的时间。澳大利亚/悉尼的转换时间为shown in my Noda Time site,它们表明UTC将于4月6日下午4点(当地时间4月7日凌晨3点)从UTC + 11过渡到UTC + 10。
这意味着到4月10日-您要 转换的本地时间的日期-偏移量的确是UTC + 10和10/04/2019 02:00:00 UTC (am)是正确的结果。如果它给出的结果是凌晨1点(因此减去UTC偏移+11),那将是不正确的,因为从4月6日的夏令时开始,将不会进行调整。