我想将给定日期与今天进行比较,这是条件:如果提供的日期大于或等于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
}
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 13
你的第一个问题是,你正在使用DateTime.Now
的不是DateTime.Today
-所以减去6个月会给你另一个DateTime
与一天中的特定时间,这是非常不可能完全相同你解析的日期/时间.对于这篇文章的其余部分,我假设您解析的值实际上是一个日期,因此您最终会DateTime
得到一个时间为午夜的时间.(当然,在我非常偏见的观点中,最好使用支持"日期"作为一流概念的库 ...)
下一个问题是,您假设从今天开始减去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
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
或者 - 而不是等效地:
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
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
请注意,您应该只对每组计算进行一次评估DateTime.Today
(或其他DateTime.Now
)- 否则您可能会发现它在评估之间发生了变化.