.NET で何かを書きました。それはうまくいきます。現在、Win32 API を使用してシェル拡張として書き直そうとしています。FILETIME
最終的に、 s を ISO-8601 文字列との間で変換したいと考えています。GetTimeZoneInformation
これは、 andFileTimeToSystemTime
およびSystemTimeToTzSpecificLocalTime
andを使用してand構造体StringCchPrintf
のメンバーを文字列にアセンブルすることで、大騒ぎせずに実行できます。SYSTEMTIME
TIME_ZONE_INFORMATION
日付/時刻を扱うときの問題は、夏時間です。を使用すると、現在GetTimeZoneInformation
有効な UTC オフセットがわかります。.NET を使用すると、 DateTime で表される時刻の夏時間が考慮されます。DateTime.ToString("o")
同じ例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
、1 年間ではなく、現地時間で一瞬ですか?