0

.NET で何かを書きました。それはうまくいきます。現在、Win32 API を使用してシェル拡張として書き直そうとしています。FILETIME最終的に、 s を ISO-8601 文字列との間で変換したいと考えています。GetTimeZoneInformationこれは、 andFileTimeToSystemTimeおよびSystemTimeToTzSpecificLocalTimeandを使用してand構造体StringCchPrintfのメンバーを文字列にアセンブルすることで、大騒ぎせずに実行できます。SYSTEMTIMETIME_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 年間ではなく、現地時間で一瞬ですか?

4

1 に答える 1