在 .NET 中写了一些东西;它运作良好。现在我正在尝试使用 Win32 API 将其重写为 shell 扩展。最终我想将FILETIME
s 转换为 ISO-8601 字符串和从 ISO-8601 字符串转换。这是可行的,无需大惊小怪,使用GetTimeZoneInformation
andFileTimeToSystemTime
和SystemTimeToTzSpecificLocalTime
and将and结构StringCchPrintf
的成员组装成一个字符串。SYSTEMTIME
TIME_ZONE_INFORMATION
像往常一样使用日期/时间时,问题是夏令时。UsingGetTimeZoneInformation
告诉我现在生效的 UTC 偏移量。使用 .NETDateTime.ToString("o")
会考虑DateTime 中表示的时间的夏令时。
相同示例FILETIME
:
输出ToString("o")
:2017-06-21T12:00:00.0000000-05:00
链式 API 的输出:2017-06-21T12:00:00-06:00
来自链式 API 调用的 UTC 偏移量是错误的。.NET 是如何DateTime
做到的?我们如何在 Win32 中复制它?有没有类似的东西GetTimeZoneInformationForYear
,但不是一年,而是本地时间的片刻?