Essayez ceci:
string ReceivedDateTimeString = "2012-10-09T07:42:13.409191Z";
DateTime TransformedReceivedDateTimeString =
DateTime.ParseExact(ReceivedDateTimeString,
"yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'FFFFFFFK",
CultureInfo.InvariantCulture,
DateTimeStyles.RoundTripKind);
Les documentation for the "o" format specifier stipule que:
Le "O" ou "o" spécificateur de format standard correspondant à la « yyyy '-' MM '-' jj'T'HH ':' mm ':' ss'. Chaîne au format personnalisé 'fffffffK' pour les valeurs DateTime et à la chaîne de formatage personnalisée "aa" - 'MM' - 'dd'T'HH': 'mm': 'ss'. 'fffffffzzz "pour les valeurs DateTimeOffset.
I.e. 7 décimales, pas 6 comme dans votre chaîne.
La chaîne mise en forme peut être analysé de nouveau en utilisant le DateTimeParse (String, IFormatProvider, DateTimeStyles) ou la méthode DateTimeParseExact si le paramètre de styles est réglé sur DateTimeStyles.RoundtripKind.
I.e. vous devez spécifier DateTimeStyles.RoundtripKind.
Dans ce qui précède, j'ai utilisé "FFF ..." plutôt que "fff ..." car cela acceptera un nombre variable de décimales (les nombres décimaux manquants sont traités comme zéro). Ceci est conforme au principe d'être "tolérant à l'entrée, strict sur la sortie".
J'ai également spécifié DateTimeStyles.RoundtripKind pour préserver la propriété Kind lors de l'analyse (Utc dans ce cas). Si vous ne le faites pas, le résultat sera converti en heure locale.
Partie 2 de quoi? – Niklas
http://stackoverflow.com/questions/12705874/utc-string-to-datetime-exception - désolé ne peut pas utiliser le même titre de question – cs0815
IMHO les downvotes sont un peu dur. Aucune des questions liées ne donne une réponse qui s'applique clairement à ce scénario. – Joe