如果帐户在30天内过期,我正在努力解决问题。我正确使用DateTime比较吗?
if (DateTime.Compare(expiryDate, now) < 30)
{
matchFound = true;
}
答案 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)
{
// ...
}