La stringa non è stata riconosciuta come DateTime valido in ParseExact con Milliseconds
Nov 23 2020
Ho una data in formato stringa, devo convertirla in DateTime, questo è il mio codice:
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());
Funziona con una data come: 2020-08-27T00: 00: 00 + 02: 00, ma non funziona con una data come quella nello script a causa dei millisecondi. Come devo modificare lo schema della data? Ne ho provati molti, ma non li ho risolti.
Risposte
4 John Nov 23 2020 at 13:53
Ci sono tre problemi con il tuo codice:
- Le stringhe di formato fanno distinzione tra maiuscole e minuscole (yyyy rappresenta un anno a 4 cifre, AAAA no, allo stesso modo dd rappresenta un giorno a 2 cifre, mentre DD no).
.sssdovrebbe essere.fffper millisecondi.- Ti aspetti Z (Zulu) ma in realtà ottieni un fuso orario ("+02: 00"). Ciò significa che la stringa di formato è diversa dalla stringa datetime.
Vi suggerisco di non perdere tempo con DateTime.ParseExactper ISO8601 datetimes, basta usare DateTimeOffset's Parseinvece (che obbedire alla differenza di orario e di lavoro con ISO8601 datetimes):
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());