Während Sie die ValueEigenschaft gemäß Leszeks Antwort direkt verwenden können, würde ich wahrscheinlich den nullbedingten Operator in Verbindung mit dem nullkoaleszierenden Operator verwenden:
string dateInUTCString =
date?.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ss.fffZ", CultureInfo.InvariantCulture)
?? "";
Hier führt der ?.nur zu einem Nullwert, wenn er datenull ist, und der ??Operator gibt einen Standardwert an, wenn das Ergebnis des date?.ToUniversalTime().ToString(...)Aufrufs null ist (was nur passieren würde, wenn datenull 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 :
string dateInUTCString = date?.ToUniversalTime().ToString("O") ?? "";
An diesem Punkt müssen Sie nicht angeben, CultureInfo.InvariantCultureda dies immer von "O" verwendet wird.
.ToString("o")?