Chociaż możesz użyć Valuewłaściwości bezpośrednio zgodnie z odpowiedzią Leszka, prawdopodobnie użyłbym operatora zerowo-warunkowego w połączeniu z operatorem zerowo-koalescencyjnym:
string dateInUTCString =
date?.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ss.fffZ", CultureInfo.InvariantCulture)
?? "";
W tym przypadku ?.wynik będzie po prostu wartością zerową, jeśli datejest zerowy, a ??operator poda wartość domyślną, jeśli wynik date?.ToUniversalTime().ToString(...)wywołania jest zerowy (co nastąpiłoby tylko, jeśli datejest zerowy).
Zauważ, że naprawdę chcesz określić niezmienną kulturę, aby uniknąć nieoczekiwanych rezultatów, gdy kultura bieżącego wątku nie korzysta z kalendarza gregoriańskiego i nie musisz cytować wszystkich tych literałów w ciągu formatu. Z pewnością działa, gdy to robisz, ale trudniej jest odczytać IMO.
Jeśli nie przeszkadza ci, ile precyzji jest wyrażana w ciągu, możesz uprościć kod, używając standardowego ciągu formatu „O” :
string dateInUTCString = date?.ToUniversalTime().ToString("O") ?? "";
W tym momencie nie musisz określać, CultureInfo.InvariantCultureponieważ zawsze jest używane przez „O”.
.ToString("o")?