比较日期不到3个月

use*_*258 -1 c# date

我需要比较日期是否少于3个月.

我会得到安装日期:

DateTime installdate=DateTime.Parse("1/5/2012 8:12:14 PM");
if ((installdate<DateTime.Now.AddMonths(-3)))
{
  // do something
}
Run Code Online (Sandbox Code Playgroud)

这是比较日期的最佳方式吗?

谢谢.

Jon*_*eet 8

一些要考虑的事情:

  • "日期x早于今天前3个月"与"今天比日期x晚3个月"不一样; 你需要确保你拥有你想要的确切语义.
  • 考虑您想要对时间组件做什么 - 您对日期或日期和时间感兴趣吗?(您是否希望条件评估根据当前时间进行更改?)
  • 考虑时区:您是否对"今天在系统的当前时区"或某个固定时区感兴趣?
  • 根据文本数据的来源,你应该有可能使用DateTime.TryParse,你应该可能使用DateTime.ParseExact或者DateTime.TryParseExact,通过预期的格式(文化)

基本上,有关于日期和时间行为的各种角落案例 - 你应该明确地考虑所有这些事情(如果你使用Noda Time代替的话,其中一些是强迫你的DateTime,顺便说一句:)

关于第一点,如果你的想法是你从安装日期(或类似的东西)获得三个月的试用期,这表明你应该增加三个月.

顺便说一下,我还会更改变量名称并删除多余的括号:

DateTime installationDate = DateTime.Parse("1/5/2012 8:12:14 PM");
DateTime trialPeriodEnd = installationDate.AddMonths(3);
if (trialPeriodEnd > DateTime.Now)
{
   // do something
}
Run Code Online (Sandbox Code Playgroud)

假设你自己在某处存储安装日期,我会尝试以某种形式存储它,这种形式不那么模糊 - 甚至可能只存储一个"ticks"值而不是字符串.但是,假设你你自己保存它,你不应该需要使用TryParse-这是有道理的去"砰"如果你不能解析值.我ParseExact可能会使用标准格式说明符 "o"(往返).