为什么时间跨度减法返回错误值

本文关键字:错误 返回 时间跨度 为什么 | 更新日期: 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;