我有两个日期,其中一个字段是日期时间字段,另一个字段是可空的日期时间字段。我想从日期1中减去date2,如果date2为null,则从今天开始减去它。
我的代码:
型号:
public class SampleViewModel
{
public DateTime Date1 {get;set;}
public DateTime? Date2 {get;set;}
public int Diff {get;set;}
}
控制器操作:
public ActionResult Index()
{
var today = DateTime.Now;
SampleViewModel model = new SampleViewModel();
model.Date1=today;
model.Date2 = today.AddDays(5);
model.Diff = (model.Date1 - (model.Date2 != null ? model.Date2 : today)).Days;//Error
return View(model);
}
我遇到编译错误
错误CS1061“ TimeSpan?”不包含“天”的定义,并且没有可访问的扩展方法“天”接受类型为“ TimeSpan”的第一个参数?可以找到(您是否缺少using指令或程序集引用?)
我在做什么错了?
答案 0 :(得分:2)
TimeSpan?
的意思是Nullable<TimeSpan>
,它与TimeSpan
的结构不同,并且没有Days
属性。
相反,您可以使用它的Value
property并在其后使用Days
;
model.Diff = (model.Date1 - (model.Date2 != null ? model.Date2 : today)).Value.Days;
或者像juharr的commented一样,您可以使用model.Date2 ?? today
返回model.Date2
如果不是null
或返回today
如果model.Date2
喜欢null
;
model.Diff = (model.Date1 - (model.Date2 ?? today)).Days;
答案 1 :(得分:2)
public class SampleViewModel
{
public DateTime Date1 {get;set;}
public DateTime? Date2 {get;set;}
public int Diff {get;set;}
}
public ActionResult Index()
{
var today = DateTime.Now;
SampleViewModel model = new SampleViewModel();
model.Date1=today;
model.Date2 = today.AddDays(5);
model.Diff = (int)(model.Date1 - (model.Date2 ?? today)).TotalDays;
return View(model);
}
答案 2 :(得分:2)
您可以使用空合并运算符(??
)来确保在计算中使用非空值。
model.Diff = (model.Date1 - (model.Date2 ?? today)).Days;
这确保了计算是在两个DateTime
而不是DateTime
和DateTime?
上完成的。如果计算中的一个值可为空,则结果将为可空。
答案 3 :(得分:1)
我建议在模型中移动逻辑并使用空合并运算符:
public class SampleViewModel
{
public SampleViewModel(DateTime date1, DateTime? date2 = null){
Date1 = date1;
Date2 = date2;
}
public DateTime Date1 { get; set; }
public DateTime? Date2 { get; set; }
public int Diff => (Date1 - (Date2 ?? DateTime.Now)).Days;
}
用法:
public ActionResult Index()
{
var today = DateTime.Now;
var model = new SampleViewModel(today, today.AddDays(5));
return View(model);
}