【问题标题】:nullable datetime variable not having Add timespan method?可以为空的日期时间变量没有添加时间跨度方法?
【发布时间】:2013-10-11 06:30:13
【问题描述】:

如何将时间跨度添加到可为空的日期时间变量?

我想将我的日期时间转换为以下格式并将其作为参数传递给存储过程

  dtToDate = dtToDate.Add(new TimeSpan(23, 59, 59));
sparamToDate.Value = dtToDate .Value.ToString("yyyy-MM-dd HH:mm:ss");

以上工作正常,因为dtToDate 不可为空

但对于可为空的日期时间变量 我找不到方法Add 来使用下面的代码并将我的日期时间转换为格式 2013-10-11 23:59:59.000

dtToDate = dtToDate.Add(new TimeSpan(23, 59, 59)); NOT WORKING FOR NULLABLE DATETIME :(

【问题讨论】:

    标签: c# asp.net datetime


    【解决方案1】:

    可空类型不应该支持它们的不可空对应对象支持的每个操作。它只是以一种允许您将其视为可以具有 null 值的方式简单地包装一个结构。在尝试访问它的任何成员之前,您需要测试该值是否为 null。

    你可以这样做:

    if (dtToDate.HasValue)
    {
        dtToDate = dtToDate.Value.Add(new TimeSpan(23, 59, 59));
    }
    

    或者这个:

    dtToDate = dtToDate.HasValue ? dtToDate.Value.Add(new TimeSpan(23, 59, 59)) : dtToDate;
    

    但如果你真的想要,你可以定义一个extension method,像这样:

    public static DateTime? Add(this DateTime? dt, TimeSpan offset)
    {
        return dt.HasValue ? dt.Value.Add(offset) : dt;
    }
    

    然后这样称呼它:

    dtToDate = dtToDate.Add(new TimeSpan(23, 59, 59));
    

    【讨论】:

    • 也不起作用 错误 61 'System.Nullable' 不包含“Add”的定义,并且没有扩展方法“Add”接受“System.Nullable”类型的第一个参数' 可以找到(您是否缺少 using 指令或程序集引用?)
    • @ashuthinks 答案清楚地显示了提供此功能的定制扩展方法...
    • @ashuthinks 如果您使用我的第一个或第二个解决方案,请注意dtToDate.Value.Add(new TimeSpan(23, 59, 59)) 中的.Value。如果您尝试使用第三种解决方案,请阅读扩展方法并确保您已将其实现为静态类的静态方法,并包含相关的命名空间。
    【解决方案2】:

    您需要在Nullable<DateTime>Value 属性上调用Add()

    if (dtToDate != null) { dtToDate = dtToDate.Value.Add(someTimeSpan); }
    

    【讨论】:

      猜你喜欢
      • 2017-08-24
      • 2020-03-29
      • 1970-01-01
      • 1970-01-01
      • 2019-08-10
      • 2019-10-14
      • 2020-01-07
      • 1970-01-01
      相关资源
      最近更新 更多