我正在尝试确定帐户是否在30天内过期。我是否正确使用DateTime比较?
if (DateTime.Compare(expiryDate, now) < 30)
{
matchFound = true;
}
我正在尝试确定帐户是否在30天内过期。我是否正确使用DateTime比较?
if (DateTime.Compare(expiryDate, now) < 30)
{
matchFound = true;
}
Answers:
我是否正确使用DateTime比较?
编号Compare仅提供有关两个日期的相对位置的信息:更少,相等或更大。您想要的是这样的:
if ((expiryDate - DateTime.Now).TotalDays < 30)
matchFound = true;
这减去两个DateTime秒。结果是TimeSpan具有TotalDays属性的对象。
另外,条件可以直接写为:
matchFound = (expiryDate - DateTime.Now).TotalDays < 30;
没有if必要的。
Days是的最大组成部分TimeSpan。阅读此书的人可以推断出,认为该Seconds物业的运作方式相同。
Days本身也可能是错误的。Days并且TotalDays在这里只是因为条件是相同的< 30,但是如果是这样的话,将会有明显的区别<= 30,因为TotalDays可能返回类似于30.421while的Days返回30。
应该
matchFound = (expiryDate - DateTime.Now).TotalDays < 30;
记下总天数,否则您将出现异常行为
TotalDays在概念上是正确使用的字段。在实践中,它们给出相同的结果,但仅仅是因为Days是的最大组成部分TimeSpan,如果存在“月”或“年”部分,而这将是另外一个故事。只需尝试使用Hours,Seconds或Milliseconds查看它们如何工作。
假设您要分配false(如果适用)matchtime,则将是一种更简单的编写方式。
matchtime = ((expiryDate - DateTime.Now).TotalDays < 30);
不,您没有正确使用它。
有关详细信息,请参见此处。
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");
// 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;
}
}