如何转换DateTime?到DateTime

时间:2009-07-07 11:46:11

标签: c# .net datetime

我想将可以为空的DateTime(DateTime?)转换为DateTime,但我收到错误:

  

无法隐式转换类型'System.DateTime?'至   'System.DateTime的'。存在显式转换(你错过了吗?   投?)

我尝试过以下方法:

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

11 个答案:

答案 0 :(得分:279)

您想要使用专为此目的而设计的null-coalescing operator

使用它最终得到这段代码。

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

答案 1 :(得分:79)

MS已经为此创建了一个方法,因此您不必使用null合并运算符。功能上没有区别,但非专家更容易一目了然地获得正在发生的事情。

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

答案 2 :(得分:40)

试试这个

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

答案 3 :(得分:21)

您需要调用可为空的DateTime的Value属性。这将返回DateTime。

假设UpdatedDateDateTime?,那么这应该有效:

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

为了使代码更容易阅读,您可以使用HasValue属性而不是null检查:

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

然后可以更加简洁:

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

答案 4 :(得分:16)

您可以使用简单的演员:

DateTime dtValue = (DateTime) dtNullAbleSource;

正如Leandro Tupone所说,你必须在

之前检查var是否为null

答案 5 :(得分:6)

以下内容如何:

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

答案 6 :(得分:6)

以下是我在Presenter中使用的片段,用于填充具有可空日期/时间的视图

memDateLogin = m.memDateLogin ?? DateTime.MinValue

答案 7 :(得分:3)

您还可以尝试Nullable(T) Properties

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

答案 8 :(得分:1)

而不是用户以下更好的

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

答案 9 :(得分:0)

试试这个:

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

答案 10 :(得分:0)

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