【问题标题】:How to compare a given date from today如何比较从今天开始的给定日期
【发布时间】:2015-09-29 16:35:12
【问题描述】:

我想将给定日期与今天进行比较,条件如下:如果提供的日期大于或等于从今天开始的 6 个月,则返回 true,否则返回 false

代码:

string strDate = tbDate.Text; //2015-03-29
if (DateTime.Now.AddMonths(-6) == DateTime.Parse(strDate)) //if given date is equal to exactly 6 months past from today (change == to > if date has to be less 6 months)
{
    lblResult.Text = "true"; //this doesn't work with the entered date above.
}
else //otherwise give me the date which will be 6 months from a given date.
{
    DateTime dt2 = Convert.ToDateTime(strDate);
    lblResult.Text = "6 Months from given date is: " + dt2.AddMonths(6); //this works fine
}
  • 如果 6 个月或大于 6 个月是我想要的 条件
  • 如果少于 6 个月是另一种情况。

【问题讨论】:

  • 如何精确?一天中的时间是否重要?
  • 如果时间不计算现在与今天的变化
  • @WaiHaLee 仅仅几个月。谢谢。
  • 2 月 30 日怎么样?
  • 函数 addmonths 不会使 1 月 30 日到 2 月 30 日 -> msdn.microsoft.com/en-us/library/… 您当前的代码有什么问题?现在更改为今天并从当前日期 strDate 仅保留日期或将时间设置为 00:00:00(就像 .Today 一样)

标签: c# datetime


【解决方案1】:

您的第一个问题是您使用的是 DateTime.Now 而不是 DateTime.Today - 因此减去 6 个月会给您另一个具有一天中特定时间的 DateTime,这不太可能完全正确 您解析的日期/时间。对于这篇文章的其余部分,我假设您解析的值实际上是一个日期,因此您最终会得到一个 DateTime ,其时间为午夜。 (当然,在我很偏颇的看法里,还是用a library which supports "date" as a first class concept...比较好)

下一个问题是,您假设从今天减去 6 个月并将其与固定日期进行比较相当于将固定日期添加 6 个月并与今天进行比较。它们不是同一个操作——日历算术不能那样工作。你应该弄清楚你希望它以哪种方式工作,并保持一致。例如:

DateTime start = DateTime.Parse(tbDate.Text);
DateTime end = start.AddMonths(6);
DateTime today = DateTime.Today;
if (end >= today)
{
    // Today is 6 months or more from the start date
}
else
{
    // ...
}

或者 - 和 等效:

DateTime target = DateTime.Parse(tbDate.Text);
DateTime today = DateTime.Today;
DateTime sixMonthsAgo = today.AddMonths(-6);
if (sixMonthsAgo >= target)
{
    // Six months ago today was the target date or later
}
else
{
    // ...
}

请注意,对于每组计算,您应该只评估 DateTime.Today(或 DateTime.Now 等)一次 - 否则您可能会发现它在评估之间会发生变化。

【讨论】:

  • 对不起,这里是条件:如果提供的日期大于或等于从今天开始的 6 个月,则返回 true 否则返回 false。
  • @SiKni8:比今天 6 个月,还是比今天 6 个月?你明白这与“从给定日期算起的 6 个月是今天或更晚”有什么不同吗?
  • 从今天起提前 6 个月。对不起
  • @SiKni8:好吧,我已经编辑了我的答案来解释这一点,但你真的应该编辑你的问题,使其更清晰很多 - 带有示例。请记住“今天 - 6 个月”和“目标日期 + 6 个月”之间的区别。
【解决方案2】:

试试这个

DateTime s = Convert.ToDateTime(tbDate.Text);
s = s.Date;

if (DateTime.Today.AddMonths(-6) == s) //if given date is equal to exactly 6 months past from today (change == to > if date has to be less 6 months)
{
lblResult.Text = "true"; //this doesn't work with the entered date above.
}

根据您的需要将 == 替换为 >= 或

【讨论】:

  • s = s.Date + ts 的意义何在? s = s.Date 会给出相同的结果。
  • 不,它只取 s 中的日期并给出时间 00:00:00
  • ts 为 0。所以添加它不会改变任何东西。
  • 我认为你是对的,所以我们只需要保留日期
猜你喜欢
  • 2011-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多