Je veux convertir une DateTime?
chaîne. Si une date est nulle puis revenir ""
, sinon retourne un format de chaîne comme ceci: "2020-03-05T07:52:59.665Z"
. Le code est quelque chose comme ça mais ça ne marchera pas. Il a déclaré "DateTime?"
ne pas contenir de définition de "ToUniversalTime". Quelqu'un sait comment résoudre ce problème?
DateTime? date = DateTime.UtcNow;
var dateInUTCString = date == null ? "" : date.ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'");
.ToString("o")
?.ToString("o")
je vais chercher plus. Je vous remercie!Réponses:
Le DateTime? a une propriété Value et une propriété HasValue
Essayer:
Vous pouvez utiliser une version courte:
la source
Bien que vous puissiez utiliser la
Value
propriété directement selon la réponse de Leszek, j'utiliserais probablement l'opérateur null-conditionnel en conjonction avec l'opérateur null-coalescing:Ici, le
?.
va juste entraîner une valeur nulle sidate
est nul, et l'??
opérateur fournira une valeur par défaut si le résultat de l'date?.ToUniversalTime().ToString(...)
appel est nul (ce qui ne se produirait que sidate
est nul).Notez que vous voulez vraiment spécifier la culture invariante pour éviter d'obtenir des résultats inattendus lorsque la culture du thread actuel n'utilise pas le calendrier grégorien, et vous n'avez pas besoin de citer tous ces littéraux dans la chaîne de format. Cela fonctionne certainement lorsque vous le faites, mais il est plus difficile de lire l'OMI.
Si la précision exprimée dans la chaîne ne vous dérange pas, vous pouvez simplifier le code en utilisant la chaîne de format standard "O" :
À ce stade, vous n'avez pas besoin de spécifier
CultureInfo.InvariantCulture
car il est toujours utilisé par "O".la source
"O"
comme chaîne de format? docs.microsoft.com/en-us/dotnet/standard/base-types/…Z
à la fin de la chaîne