Zeichenfolge wurde in ParseExact mit Millisekunden nicht als gültige DateTime erkannt
Nov 23 2020
Ich habe ein Datum im Zeichenfolgenformat. Ich muss es in DateTime konvertieren. Dies ist mein Code:
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());
Es funktioniert mit einem Datum wie: 2020-08-27T00: 00: 00 + 02: 00, aber es funktioniert aufgrund von Millis nicht mit einem Datum wie dem im Skript. Wie soll ich das Datumsmuster ändern? Ich habe viele davon ausprobiert, aber nicht gelöst.
Antworten
4 John Nov 23 2020 at 13:53
Es gibt drei Probleme mit Ihrem Code:
- Bei Formatzeichenfolgen wird zwischen Groß- und Kleinschreibung unterschieden (JJJJ steht für ein vierstelliges Jahr, JJJJ nicht, TT steht ebenfalls für einen zweistelligen Tag, TT nicht).
.sss
sollte.fff
für Millisekunden sein.- Sie erwarten Z (Zulu), aber Sie erhalten tatsächlich einen Zeitversatz ("+02: 00"). Dies bedeutet, dass sich die Formatzeichenfolge von Ihrer Datums- / Uhrzeitzeichenfolge unterscheidet.
Ich schlage vor, Sie DateTime.ParseExact
kümmern sich nicht um ISO8601-Datenzeiten, sondern verwenden stattdessen nur DateTimeOffset
's Parse
(wodurch der Zeitversatz eingehalten wird und mit ISO8601-Datenzeiten gearbeitet wird):
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());