Chcę przekonwertować DateTime?
ciąg na. Jeżeli data jest null następnie powrócić ""
, jeszcze zwrócić format string tak: "2020-03-05T07:52:59.665Z"
. Kod jest mniej więcej taki, ale nie działa. Powiedział, "DateTime?"
że nie zawierają definicji „ToUniversalTime”. Ktoś wie, jak to naprawić?
DateTime? date = DateTime.UtcNow;
var dateInUTCString = date == null ? "" : date.ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'");
.ToString("o")
?.ToString("o")
będę badał więcej. Dziękuję Ci!Odpowiedzi:
Data i godzina? ma właściwość Value i właściwość HasValue
Próbować:
Możesz użyć krótkiej wersji:
źródło
Chociaż możesz użyć
Value
właściwości bezpośrednio zgodnie z odpowiedzią Leszka, prawdopodobnie użyłbym operatora zerowo-warunkowego w połączeniu z operatorem zerowo-koalescencyjnym:W tym przypadku
?.
wynik będzie po prostu wartością zerową, jeślidate
jest zerowy, a??
operator poda wartość domyślną, jeśli wynikdate?.ToUniversalTime().ToString(...)
wywołania jest zerowy (co nastąpiłoby tylko, jeślidate
jest 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” :
W tym momencie nie musisz określać,
CultureInfo.InvariantCulture
ponieważ zawsze jest używane przez „O”.źródło
"O"
jako ciągu formatu? docs.microsoft.com/en-us/dotnet/standard/base-types/…Z
na końcu łańcucha