为什么时间跨度减法返回错误值
本文关键字:错误 返回 时间跨度 为什么 | 更新日期: 2023-09-27 18:34:30
我正在尝试使用时间跨度查找两个日期之间的天数。
nextdate1='2014-12-20'
today `='2014-12-18'`
我的示例代码是:
DateTime nexdate1 = dr.GetDateTime(2); //gets from database. I checked and the value is correct
DateTime today = DateTime.Now;
TimeSpan nextdate = nexdate1.Subtract(today);
int difference = nextdate.Days;
现在我得到了difference=1
.实际上是difference is 2 (20-18)
.
为什么它显示差异为 1?
TimeSpan.Days
是一个int
。您的答案被截断了。
在下面的代码中:
var date1 = DateTime.Parse("Dec 12, 2014");
var date2 = DateTime.Parse("Dec 14, 2014");
var difference = (date2 - date1).Days;
difference
设置为 2。
但在此代码中:
var date1 = DateTime.Parse("Dec 12, 2014 12:01 AM");
var date2 = DateTime.Parse("Dec 14, 2014");
var difference = (date2 - date1).Days;
difference
设置为 1。
当我们查看时间跨度date2 - date1
,我们得到以下内容:
{1.23:59:00}
Days: 1
Hours: 23
Minutes: 59
Seconds: 0
TotalDays: 1.9993055555555554
您应该设置nextDate = nexdate1.Date.Subtract(DateTime.Today);
以便只查看天数差异,或者(int)Math.Round(nextDate.TotalDays)
实际上,您的日期时间变量具有时间部分,因为该时间您的结果会受到影响。因此,您只需要找到日期时间值的日期部分:
使用DateTime.Date
这样做:
DateTime nexdate1 = dr.GetDateTime(2);
DateTime today = DateTime.Now;
TimeSpan nextdate = nexdate1.Date.Subtract(today.Date); // Here find only date part from datetime value.
//TimeSpan nextdate = nexdate1-today
int difference = nextdate.Days;