DateTime.Compare如何检查日期是否少于30天?

77 .net c# datetime

如果帐户在30天内到期,我正在努力解决问题.我正确使用DateTime比较吗?

if (DateTime.Compare(expiryDate, now) < 30)

{
     matchFound = true;
}
Run Code Online (Sandbox Code Playgroud)

Kon*_*lph 209

我正确使用DateTime比较吗?

No. Compare仅提供有关两个日期的相对位置的信息:更少,相等或更大.你想要的是这样的:

if ((expiryDate - DateTime.Now).TotalDays < 30)
    matchFound = true;
Run Code Online (Sandbox Code Playgroud)

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

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

matchFound = (expiryDate - DateTime.Now).TotalDays < 30;
Run Code Online (Sandbox Code Playgroud)

不需要if.

  • 呃......我只是让我的答案更长,所以可以随意减去一个想象中的投票.;-) (4认同)
  • 应该允许给你2+;)一个用于答案,一个用于表达它的简短方式 (2认同)
  • 它在概念上更准确.它没有任何区别,因为`Days`是'TimeSpan`的最大组成部分.阅读本文的人可以推断,认为"Seconds"属性的工作方式相同. (2认同)
  • 再加上 João Portela 提出的观点,即使是“Days”本身也可能是错误的。`Days` 和 `TotalDays` 在这里相同只是因为条件是 `&lt; 30`,但如果它是 `&lt;= 30` 就会有明显的不同,因为 `TotalDays` 可能返回类似 `30.421` 而` Days` 仍然返回 `30`。 (2认同)

Luk*_*uke 14

应该

matchFound = (expiryDate - DateTime.Now).TotalDays < 30;
Run Code Online (Sandbox Code Playgroud)

注意总天数,否则你会得到明智的行为


haq*_*win 7

好吧,我会这样做:

TimeSpan diff = expiryDate - DateTime.Today;
if (diff.Days > 30) 
   matchFound = true;
Run Code Online (Sandbox Code Playgroud)

比较只响应一个表示天气的整数,第一个是更早,相同或更晚......


Jar*_*Par 5

试试这个

if ( (expiryDate - DateTime.Now ).TotalDays < 30 ) { 
  matchFound = true;
}
Run Code Online (Sandbox Code Playgroud)