Ich möchte einen DateTime?
in einen String konvertieren . Wenn ein Datum null ist, geben Sie es zurück ""
, andernfalls geben Sie ein Zeichenfolgenformat wie das folgende zurück : "2020-03-05T07:52:59.665Z"
. Der Code ist ungefähr so, aber er funktioniert nicht. Es heißt "DateTime?"
, keine Definition für "ToUniversalTime" enthalten. Weiß jemand, wie man das behebt?
DateTime? date = DateTime.UtcNow;
var dateInUTCString = date == null ? "" : date.ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'");
.ToString("o")
?.ToString("o")
, ich verstehe, ich werde mehr recherchieren. Vielen Dank!Antworten:
Die DateTime? hat eine Value-Eigenschaft und eine HasValue-Eigenschaft
Versuchen:
Sie können eine Kurzversion verwenden:
quelle
Während Sie die
Value
Eigenschaft gemäß Leszeks Antwort direkt verwenden können, würde ich wahrscheinlich den nullbedingten Operator in Verbindung mit dem nullkoaleszierenden Operator verwenden:Hier führt der
?.
nur zu einem Nullwert, wenn erdate
null ist, und der??
Operator gibt einen Standardwert an, wenn das Ergebnis desdate?.ToUniversalTime().ToString(...)
Aufrufs null ist (was nur passieren würde, wenndate
null ist).Beachten Sie, dass Sie die invariante Kultur wirklich angeben möchten, um unerwartete Ergebnisse zu vermeiden, wenn die Kultur des aktuellen Threads nicht den Gregorianischen Kalender verwendet und Sie nicht alle diese Literale in der Formatzeichenfolge zitieren müssen. Es funktioniert sicherlich, wenn Sie dies tun, aber es ist schwieriger, IMO zu lesen.
Wenn es Ihnen nichts ausmacht, wie genau die Zeichenfolge ist, können Sie den Code mithilfe der Zeichenfolge im Standardformat "O" vereinfachen :
An diesem Punkt müssen Sie nicht angeben,
CultureInfo.InvariantCulture
da dies immer von "O" verwendet wird.quelle
"O"
als Formatzeichenfolge verwenden? docs.microsoft.com/en-us/dotnet/standard/base-types/…Z
am Ende der Zeichenfolge steht