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;