DateTime.Compare如何检查date是否小于30天?

我试图解决帐户是否在30天内到期。 我使用DateTime比较正确吗?

if (DateTime.Compare(expiryDate, now) < 30) { matchFound = true; } 

我使用DateTime比较正确吗?

不, Compare只提供有关两个date的相对位置的信息:小于,等于或大于。 你想要的是这样的:

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

这会减去两个DateTime 。 结果是具有TotalDays属性的TimeSpan对象。

另外,条件可以直接写成:

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

没有, if需要。

应该

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

请注意总天数,否则你会得到干净的行为

那么我会这样做,而不是:

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

只比较一个表示天气的整数,第一个是更早,更晚或更晚…

试试这个

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

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

你要:

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

这会给你准确的结果:

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

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

所有你需要的是

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

注意,如果您决定使用几分钟或几个月甚至几年作为到期标准,这将起作用。

不,比较函数将返回1,0或-1。 0当两个值相等时,-1和1意味着小于和大于,我相信这个顺序,但我经常把它们混合起来。

不,你没有正确使用它。

详情请看这里 。

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

你想要做的是减去两个date时间(expiryDate和DateTime.Now)。 这将返回一个TimeSpantypes的对象。 TimeSpan有一个属性“天”。 比较这个数字到30你的答案。

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

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

其实这些答案都没有为我工作。 我是这样解决的:

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

当我尝试这样做:

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

今天,2011-11-14和我的expiryDate是2011-10-17我得到了matchFound = -28。 而不是28.所以我倒过去的检查。

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

假设你想分配false (如果适用) matchtime ,一个简单的方法来写它将是..

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