关于c#:如何转换DateTime?

How to convert DateTime? to DateTime

我想将一个可以为空的日期时间(DateTime?转换为DateTime,但我得到一个错误:

Cannot implicitly convert type 'System.DateTime?' to
'System.DateTime'. An explicit conversion exists (are you missing a
cast?)

我已尝试以下操作:

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

您希望使用空合并运算符,它正是为此目的而设计的。

使用它,最终会得到这个代码。

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


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

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


试试这个

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


需要调用可为空的日期时间的Value属性。这将返回日期时间。

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

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

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

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

这可以变得更加简洁:

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


您可以使用简单的强制转换:

1
DateTime dtValue = (DateTime) dtNullAbleSource;

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


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

1
memDateLogin = m.memDateLogin ?? DateTime.MinValue


下面怎么样?

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

您还可以尝试空(T)属性:

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

而是使用以下更好的方法

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

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


试试这个:

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