比较日期不到3个月

时间:2012-01-19 10:43:26

标签: c# date

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

我将获得安装日期:

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

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

感谢。

3 个答案:

答案 0 :(得分:8)

要考虑的一些事情:

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

基本上,在日期和时间行为方面存在各种各样的案例 - 您应该明确考虑所有这些事情(如果您使用Noda Time而不是DateTime.TryParseExact,其中一些事情会被强加给您,顺便说一下:)

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

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

DateTime

假设你自己在某个地方存储了安装日期,我会尝试将它存储在一些不太模糊的形式中 - 甚至可能只存储一个“ticks”值而不是字符串。但假设您 自己存储它,您不应该使用DateTime installationDate = DateTime.Parse("1/5/2012 8:12:14 PM"); DateTime trialPeriodEnd = installationDate.AddMonths(3); if (trialPeriodEnd > DateTime.Now) { // do something } - 如果您无法解析该值,那么“爆炸”是有意义的。我使用TryParse,可能使用standard format specifier“o”(往返)。

答案 1 :(得分:3)

DateTime installdate ;

            if (DateTime.TryParse("1/5/2012 8:12:14 PM", out installdate))
            {
                if ((installdate < DateTime.Now.AddMonths(-3))) { } 
            }

使用Tryparse以验证参数中传递的日期是有效还是无效

答案 2 :(得分:-1)

使用TimeSpan获取日期差异:

TimeSpan difference = datetimeEnd - datetimeStart;