文字列がミリ秒のParseExactで有効な日時として認識されませんでした
Nov 23 2020
文字列形式の日付があります。DateTimeに変換する必要があります。これが私のコードです。
DateTime dt = DateTime.ParseExact("2018-04-09T09:27:07.247+02:00", "YYYY-MM-DDTHH:mm:ss.SSSZ", System.Globalization.CultureInfo.InvariantCulture).ToUniversalTime();
Console.WriteLine(TimeZoneInfo.ConvertTimeFromUtc(dt, TimeZoneInfo.FindSystemTimeZoneById("W. Europe Standard Time")).ToString());
2020-08-27T00:00:00 + 02:00のような日付では機能しますが、ミリ秒のため、スクリプトのような日付では機能しません。日付パターンはどのように変更すればよいですか?私はそれらの多くを試しましたが、解決しませんでした。
回答
4 John Nov 23 2020 at 13:53
コードには3つの問題があります。
- 形式の文字列では大文字と小文字が区別されます(yyyyは4桁の年を表し、YYYYはそうではありません。同様に、ddは2桁の日を表しますが、DDはそうではありません)。
.sss
.fff
ミリ秒である必要があります。- Z(Zulu)を期待していますが、実際には時間オフセット( "+02:00")が発生しています。これは、フォーマット文字列が日時文字列と異なることを意味します。
DateTime.ParseExact
ISO8601の日時については気にせず、代わりにDateTimeOffset
'sParse
を使用することをお勧めします(これは時間オフセットに従い、ISO8601の日時で機能します)。
DateTimeOffset dt = DateTimeOffset.Parse("2018-04-09T09:27:07.247+02:00", System.Globalization.CultureInfo.InvariantCulture).ToUniversalTime();
Console.WriteLine(TimeZoneInfo.ConvertTimeFromUtc(dt.DateTime, TimeZoneInfo.FindSystemTimeZoneById("W. Europe Standard Time")).ToString());