Bagaimana cara mengubah DateTime? ke DateTime


171

Saya ingin mengonversi DateTime yang dapat dibatalkan ( DateTime?) menjadi DateTime, tetapi saya mendapatkan kesalahan:

Tidak dapat secara implisit mengonversi tipe 'System.DateTime?' ke 'System.DateTime'. Konversi eksplisit ada (apakah Anda melewatkan gips?)

Saya telah mencoba yang berikut ini:

DateTime UpdatedTime = (DateTime)_objHotelPackageOrder.UpdatedDate == null 
    ? DateTime.Now : _objHotelPackageOrder.UpdatedDate;

Jawaban:


304

Anda ingin menggunakan operator penggabungan nol , yang dirancang tepat untuk tujuan ini.

Dengan menggunakannya Anda berakhir dengan kode ini.

DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate ?? DateTime.Now;

1
di sini adalah cuplikan yang saya gunakan dalam Presenter yang mengisi tampilan dengan Nullable Date / Time: memDateLogin = m.memDateLogin ?? DateTime.MinValue
— Ravi Ram

'Tanggal Waktu?' dosis tidak mengandung definisi untuk 'Tanggal Diperbarui'
— Vasil Valchev

88

MS sudah membuat metode untuk ini, jadi Anda tidak perlu menggunakan operator penggabungan nol. Tidak ada perbedaan dalam fungsionalitas, tetapi lebih mudah bagi non-ahli untuk mendapatkan apa yang terjadi secara sekilas.

DateTime updatedTime = _objHotelPackageOrder.UpdatedDate.GetValueOrDefault(DateTime.Now);

43

Coba ini

DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate ?? DateTime.Now;

Kuncinya di sini adalah operator null-coalescing, lihat jawaban dinginkan 42 informasi lebih lanjut.
— cspolton

24

Anda dapat menggunakan gips sederhana:

DateTime dtValue = (DateTime) dtNullAbleSource;

Seperti yang dikatakan Leandro Tupone, Anda harus memeriksa apakah var itu nol sebelumnya


6
Sempurna jika Anda memeriksa apakah var nol sebelum +1
— Leandro

22

Anda perlu memanggil properti Value dari DateTime yang dapat dibatalkan. Ini akan mengembalikan DateTime.

Dengan asumsi bahwa UpdatedDateadalah DateTime?, maka ini harus bekerja:

DateTime UpdatedTime = (DateTime)_objHotelPackageOrder.UpdatedDate == null ? DateTime.Now : _objHotelPackageOrder.UpdatedDate.Value;

Untuk membuat kode sedikit lebih mudah dibaca, Anda bisa menggunakan properti HasValue daripada nullmemeriksa:

DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate.HasValue
                          ? _objHotelPackageOrder.UpdatedDate.Value
                          : DateTime.Now;

Ini dapat dibuat lebih ringkas:

DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate ?? DateTime.Now;

6

Bagaimana dengan yang berikut:

DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate.HasValue ? _objHotelPackageOrder.UpdatedDate.value : DateTime.Now;

6

Berikut adalah cuplikan yang saya gunakan dalam Presenter yang mengisi tampilan dengan Tanggal / Waktu Nullable

memDateLogin = m.memDateLogin ?? DateTime.MinValue


1

Pertimbangkan untuk menggunakan yang berikut ini yang jauh lebih baik daripada jawaban yang diterima

DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate == null 
    ? DateTime.Now : (DateTime)_objHotelPackageOrder.UpdatedDate;

Mau bilang kenapa lebih baik?
— n4rzul

0

Coba ini:

DateTime UpdatedTime = (DateTime)_objHotelPackageOrder.UpdatedDate == null ? DateTime.Now : _objHotelPackageOrder.UpdatedDate.Value;

0
DateTime UpdatedTime = _objHotelPackageOrder.HasValue ? _objHotelPackageOrder.UpdatedDate.Value : DateTime.Now;

4
Biasanya dianggap sebagai bentuk yang baik untuk menjelaskan saran / jawaban Anda. Jawaban kode saja bisa sangat tidak informatif, meskipun secara teknis benar.
— Maximilian Ast

1
@ MaximilianAst ya Anda benar akan mencoba menerapkan cara yang Anda sarankan :)
— Harsh Vyas
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.