如何转换日期时间?将日期时间

我想将一个可空的DateTime (DateTime?)转换为DateTime,但我得到一个错误:

不能隐式转换类型'System.DateTime?” “System.DateTime”。存在显式转换(是否缺少 演员?)< / p >

我尝试了以下几点:

DateTime UpdatedTime = (DateTime)_objHotelPackageOrder.UpdatedDate == null
? DateTime.Now : _objHotelPackageOrder.UpdatedDate;
258719 次浏览

你需要调用可空DateTime的价值属性。这将返回一个DateTime。

假设UpdatedDateDateTime?,那么这应该是可行的:

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

To make the code a bit easier to read, you could use the HasValue property instead of the null check:

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

这可以变得更加简洁:

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

试试这个:

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

下面这个怎么样:

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

试试这个

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

你想要使用空合并操作符,它正是为此目的而设计的。

使用它,您最终会得到以下代码。

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

MS已经为此做了一个方法,所以你不必使用空合并操作符。在功能上没有区别,但是对于非专业人士来说更容易一目了然地了解正在发生的事情。

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

下面是我在演示器中使用的一个片段,该演示器用可空日期/时间填充视图

memDateLogin = m.memDateLogin ?? DateTime.MinValue

你也可以尝试Nullable (T)的属性:

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

考虑使用下面的答案,它比公认的答案要好得多

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

你可以使用简单的类型转换:

DateTime dtValue = (DateTime) dtNullAbleSource;

正如Leandro Tupone所说,你必须检查之前的var是否为空

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

你也可以从c# 7.0开始使用是运营商:

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

或者在案例中进行区分

if (_objHotelPackageOrder.UpdatedDate is DateTime UpdatedTime)
{
...
}

为了完整起见。