Saya ingin mengonversi menjadi DateTime?
string. Jika kencan adalah null kemudian kembali ""
, yang lain kembali format string seperti ini: "2020-03-05T07:52:59.665Z"
. Kodenya kira-kira seperti ini tetapi tidak berfungsi. Dikatakan "DateTime?"
tidak mengandung definisi untuk "ToUniversalTime". Ada yang tahu bagaimana cara memperbaikinya?
DateTime? date = DateTime.UtcNow;
var dateInUTCString = date == null ? "" : date.ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'");
.ToString("o")
?.ToString("o")
, saya akan meneliti lebih lanjut. Terima kasih!Jawaban:
DateTime? memiliki properti Value dan properti HasValue
Mencoba:
Anda dapat menggunakan versi pendek:
sumber
Meskipun Anda dapat menggunakan
Value
properti secara langsung sesuai jawaban Leszek, saya mungkin akan menggunakan operator kondisional-nol bersama dengan operator penggabungan-nol:Di sini
?.
hanya akan menghasilkan nilai nol jikadate
nol, dan??
operator akan memberikan nilai default jika hasildate?.ToUniversalTime().ToString(...)
panggilan adalah nol (yang hanya akan terjadi jikadate
bernilai nol).Perhatikan bahwa Anda benar-benar ingin menentukan budaya invarian untuk menghindari mendapatkan hasil yang tidak terduga ketika budaya utas saat ini tidak menggunakan kalender Gregorian, dan Anda tidak perlu mengutip semua literal dalam string format. Ini pasti berfungsi ketika Anda melakukannya, tetapi lebih sulit untuk membaca IMO.
Jika Anda tidak keberatan berapa banyak ketepatan diekspresikan dalam string, Anda dapat membuat kode lebih sederhana menggunakan string format standar "O" :
Pada titik itu Anda tidak perlu menentukan
CultureInfo.InvariantCulture
karena itu selalu digunakan oleh "O".sumber
"O"
sebagai format string? docs.microsoft.com/en-us/dotnet/standard/base-types/…Z
di akhir string