比较两个DATE并在c#中获取Days

时间:2012-08-07 10:02:17

标签: c#

通过comapaing两个日期来计算天数,如果你想比较两个日期,比如图书馆的预定日期和退货日期,那么你可以用这种方式得到没有天数

        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);
        }

3 个答案:

答案 0 :(得分:12)

使用TimeSpan

TimeSpan ts = dateTime1 - dateTime2;

ts.TotalDays将为您提供天数的差异。

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

TimeSpan ts = DateTime.Now - due;

//or 

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

int NumberOfDays = ts.TotalDays;

您可以查看TimeSpan.TotalDays属性

答案 1 :(得分:3)

可以使用TimeSpan,如其他答案所示 - 但你需要注意一天中的时间。您是否真的试图将这些视为日期或具有时间的日期?时区怎么样?您是否正在使用“本地”DateTime值?

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

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

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

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

答案 2 :(得分:2)

您需要TimeSpan

Timespan t = ReturnDateTime - DateTime.Now;

然后使用

t.Days

用于计算剩余天数。