Ваша первая проблема заключается в том, что вы используете 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
{
// ...
}
Или альтернативно - и нет эквивалентно:
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
и т. д.) только один раз для каждого набора вычислений, иначе вы можете обнаружить, что оно меняется между оценками.
person
Jon Skeet
schedule
29.09.2015