我正在尝试确定帐户是否在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.421
while的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;
}
}