DateTime.Compare如何检查日期是否少于30天?

时间:2009-02-09 14:36:33

标签: c# .net datetime

如果帐户在30天内过期,我正在努力解决问题。我正确使用DateTime比较吗?

if (DateTime.Compare(expiryDate, now) < 30)

{
     matchFound = true;
}

15 个答案:

答案 0 :(得分:196)

  

我是否正确使用DateTime比较?

没有。 Compare仅提供有关两个日期的相对位置的信息:less,equal或greater。你想要的是这样的:

if ((expiryDate - DateTime.Now).TotalDays < 30)
    matchFound = true;

这减去了两个DateTime。结果是TimeSpan对象,其具有TotalDays属性。

此外,条件可以直接写为:

matchFound = (expiryDate - DateTime.Now).TotalDays < 30;

不需要if

答案 1 :(得分:13)

应该是

matchFound = (expiryDate - DateTime.Now).TotalDays < 30;

注意总天数 否则你会得到奇怪的行为

答案 2 :(得分:7)

好吧,我会这样做:

TimeSpan diff = expiryDate - DateTime.Today;
if (diff.Days > 30) 
   matchFound = true;

比较只响应一个表示天气的整数,第一个是更早,相同或更晚......

答案 3 :(得分:5)

试试这个

if ( (expiryDate - DateTime.Now ).TotalDays < 30 ) { 
  matchFound = true;
}

答案 4 :(得分:3)

比较返回1,0,-1分别大于,等于,小于。

你想:

    if (DateTime.Compare(expiryDate, DateTime.Now.AddDays(30)) <= 0) 
    { 
        bool matchFound = true;
    }

答案 5 :(得分:1)

这将为您提供准确的结果:

if ((expiryDate.Date - DateTime.Now.Date).Days < 30)
    matchFound = true;

答案 6 :(得分:1)

比较是不必要的, / TotalDays 是不必要的。

你需要的只是

if (expireDate < DateTime.Now) {
    // has expired
} else {
    // not expired
}

请注意,如果您决定使用分钟或数月甚至数年作为到期标准,这将有效。

答案 7 :(得分:0)

不,比较功能将返回1,0或-1。 0当两个值相等时,-1和1表示小于和大于,我相信那个顺序,但我经常将它们混合起来。

答案 8 :(得分:0)

不,你没有正确使用它。

有关详细信息,请参阅here

DateTime t1 = new DateTime(100);
DateTime t2 = new DateTime(20);

if (DateTime.Compare(t1, t2) >  0) Console.WriteLine("t1 > t2"); 
if (DateTime.Compare(t1, t2) == 0) Console.WriteLine("t1 == t2"); 
if (DateTime.Compare(t1, t2) <  0) Console.WriteLine("t1 < t2");

答案 9 :(得分:0)

您要做的是减去两个DateTimes(expiryDate和DateTime.Now)。这将返回TimeSpan类型的对象。 TimeSpan有一个属性“Days”。将这个数字与30的答案进行比较。

答案 10 :(得分:0)

不,这不正确,试试这个:

DateTime expiryDate = DateTime.Now.AddDays(-31);
if (DateTime.Compare(expiryDate, DateTime.Now.AddDays(-30)) < 1)
{
    matchFound = true;
}

答案 11 :(得分:0)

实际上这些答案都不适合我。我通过这样做解决了它:

  if ((expireDate.Date - DateTime.Now).Days > -30)
  {
    matchFound = true;
  }

当我尝试这样做时:

matchFound = (expiryDate - DateTime.Now).Days < 30;

今天,2011-11-14和我的到期日期是2011-10-17我得到了matchFound = -28。而不是28.所以我反转了最后一次检查。

答案 12 :(得分:0)

// this isn't set up for good processing.  
//I don't know what data set has the expiration 
//dates of your accounts.  I assume a list.
// matchfound is a single variablethat returns true if any 1 record is expired.

bool matchFound = false;
            DateTime dateOfExpiration = DateTime.Today.AddDays(-30);
            List<DateTime> accountExpireDates = new List<DateTime>();
            foreach (DateTime date in accountExpireDates)
            {
                if (DateTime.Compare(dateOfExpiration, date) != -1)
                {
                    matchFound = true;
            }
            }

答案 13 :(得分:0)

假设您要将false(如果适用)分配给matchtime,更简单的写作方式是..

matchtime = ((expiryDate - DateTime.Now).TotalDays < 30) ? true : false;

答案 14 :(得分:0)

您可以尝试这样做:

var daysPassed = (DateTime.UtcNow - expiryDate).Days;
if (daysPassed > 30)
{ 
    // ...
}