DateTime + long (hrs) with C#

本文关键字:with hrs long DateTime | 更新日期: 2023-09-27 18:03:39

如何在C#中添加(DateTime?(和(long?(,其中long是小时。DateTime 中预期的结果

DateTime + long (hrs) with C#

        DateTime dt = DateTime.Now;
        long hours = 44;
        var dt2=dt.AddHours(hours);  // uses an implicit cast from long to double
                                     // use "(double)hours" for an explicit cast

**空版本**

        DateTime? dt = DateTime.Now;
        long? hours = 44;
        if(hours==null) hours=0;
        DateTime? dt2 = (dt == null) ? null : (DateTime?) ((DateTime) dt).AddHours(hours);

**空版本(紧凑型(**

        DateTime? dt = DateTime.Now;
        long? hours = 44;
        DateTime? dt2 = (dt == null) ? null : (DateTime?) dt.Value.AddHours(hours??0);

**可为null,带有if语句**

        DateTime? dt = DateTime.Now;
        long? hours = 44;
        if(hours==null) hours=0;
        DateTime? dt2 = null;
        if (dt == null) 
            dt2 = (DateTime?) ((DateTime) dt).AddHours(hours);
        else 
            dt2 = null;

跟进:

在其他答案中,我喜欢使用.Value(它看起来比强制转换干净一点(,但这并不能消除在hours参数中检查null的必要性。顺便说一句:我尝试了另一个。值回答了,得到了参数1:无法从"long?"转换到"double",即不能忘记空检查。

if (myNullableDate != null && myNullableHours != null)
{
    myNullableDate = myNullableDate.Value.AddHours((double)myNullableHours) ;
}

您应该查看

DateTime? dt2 = DateTime.Now;
long? lng = 5L;
if (dt2.HasValue)
   dt2 = dt2.Value.AddHours(lng ?? 0);

假设你的DateTimemyDt,你的long是myLong,这应该有效:

myDt.AddHours((double)myLong);
DateTime datetime;
long hours = 123;
// ...
datetime = datetime.AddHours((double)hours);

请注意,AddHours需要一个double,所以我们需要将其转换为那个。

long? hours = 1;
DateTime? d = new DateTime?();
d.Value.AddHours((double) hours);