La chaîne n'a pas été reconnue comme un DateTime valide dans ParseExact avec des millisecondes
Nov 23 2020
J'ai une Date au format chaîne, j'ai besoin de la convertir en DateTime, voici mon 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());
Cela fonctionne avec une date comme: 2020-08-27T00: 00: 00 + 02: 00, mais cela ne fonctionne pas avec une date comme celle du script à cause de millis. Comment changer le modèle de date? J'ai essayé beaucoup d'entre eux, mais je n'ai pas résolu.
Réponses
4 John Nov 23 2020 at 13:53
Il y a trois problèmes avec votre code:
- Les chaînes de format sont sensibles à la casse (aaaa représente une année à 4 chiffres, AAAA ne le fait pas, de même que jj représente un jour à 2 chiffres, contrairement à JJ).
.sss
devrait.fff
durer des millisecondes.- Vous attendez Z (Zulu) mais vous obtenez en fait un décalage horaire ("+02: 00"). Cela signifie que la chaîne de format diffère de votre chaîne datetime.
Je vous suggère de ne pas vous soucier DateTime.ParseExact
des datetimes ISO8601, utilisez simplement DateTimeOffset
s à la Parse
place (qui obéira au décalage horaire et fonctionnera avec les datetimes 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());