6

通过比较两个日期来计算天数,当您想比较两个日期(例如图书馆中图书的到期日期和归还日期)时,您可以通过这种方式获得天数

        int TotalDay;
        DateTime due = OldDate;

        int day = due.Day;
        int nday = DateTime.Now.Day;
        int mnt = due.Month;
        int nmnt = DateTime.Now.Month;
        int yr = due.Year;
        int nyr = DateTime.Now.Year;
        if (nyr <= yr)
        {
            if (nmnt <= mnt)
            {
                if (nday > day)
                {
                    TotalDay = nday - day;
                }
            }
            else
            {
                TotalDay = nday - day;
                m = nmnt - mnt;
                TotalDay = d + (m * 30);
            }
        }
        else
        {
            TotalDay = nday - day;
            m = nmnt - mnt;
            TotalDay  = d + (m * 30);
            int y = nyr - yr;
            TotalDay  = d + (y * 365);
        }
4

3 回答 3

15

使用时间跨度

TimeSpan ts = dateTime1 - dateTime2;

ts.TotalDays会给你天数的差异。

在您的情况下due是截止日期,并且DateTime.Now是当前日期。您可以使用:

TimeSpan ts = DateTime.Now - due;

或使用TimeSpan.TotalDays属性:

TimeSpan ts = DateTime.Now.Subtract(due);

double NumberOfDays = ts.TotalDays;
于 2012-08-07T10:03:07.187 回答
3

可以按照其他答案所示使用TimeSpan- 但您需要注意一天中的时间。您实际上是在尝试将这些视为日期还是带有时间的日期?时区呢?您是否对两者都使用“本地”DateTime值?

虽然DateTime可以处理所有这些,但它让事情变得不清楚。我个人会使用Noda Time(这不应该让任何人感到惊讶,因为它是我自己的图书馆......)

LocalDate startDate = ...;
LocalDate endDate = ...;

long days = Period.Between(startDate, endDate, PeriodUnits.Days).Days;

请注意,查找“今天的日期”也需要知道适当的时区。(DateTime.NowDateTime.Today假设您的代码正在运行的系统时区,但这可能是也可能不是您想要的。)

于 2012-08-07T10:12:39.587 回答
2

You need TimeSpan

Timespan t = ReturnDateTime - DateTime.Now;

Then use

t.Days

for calculating how many days are left.

于 2012-08-07T10:05:15.550 回答