为什么Timespan减法方法返回错误值?

时间:2014-12-18 05:37:21

标签: c# date timespan

我试图使用时间跨度找到两个日期之间的天数。

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?

2 个答案:

答案 0 :(得分:4)

TimeSpan.Daysint。你的答案会被截断。

在以下代码中:

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)

答案 1 :(得分:1)

实际上你的datetime变量有时间部分,因为那时你的结果会受到影响。因此,您必须只找到日期时间值的日期部分:

使用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;