У меня есть метод, который (иногда) принимает строку в формате "dddd MMMM dd"
(понедельник, январь 04), который необходимо проанализировать в DateTime. Я говорю иногда, потому что это может также быть передано в "Today"
или "Tomorrow"
в качестве значения.
Код для обработки этого достаточно прост:
if (string.Compare(date, "Today", true) == 0)
_selectedDate = DateTime.Today;
else if (string.Compare(date, "Tomorrow", true) == 0)
_selectedDate = DateTime.Today.AddDays(1);
else
_selectedDate = DateTime.Parse(date);
Это работало до середины декабря. Некоторые из вас, вероятно, уже заметили, что пошло не так.
Это не удалось бы в любую дату в Новом году с ошибкой:
«Строка не была распознана как действительный DateTime, поскольку день недели был неправильным.»
Он был принят "Monday January 04"
, который является действительной датой 2010 года, но не 2009 года.
Итак, мой вопрос: есть ли способ установить год для текущего или следующего года? Прямо сейчас, как быстрое и грязное исправление, у меня есть это:
if (!DateTime.TryParseExact(date, "dddd MMMM dd", CultureInfo.InvariantCulture, DateTimeStyles.None, out _selectedDate))
if (!DateTime.TryParseExact(date + " " + (DateTime.Now.Year + 1), "dddd MMMM dd yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out _selectedDate))
throw new FormatException("That date is not valid.");
Таким образом, он попытается проанализировать его, используя текущий год, и в случае неудачи попытается снова использовать следующий год. Если после этого произойдет сбой, он просто предположит, что это недопустимая дата, потому что мне нужно беспокоиться только за 1 год, но если у кого-то есть более гибкое решение, я был бы признателен. (Обратите внимание, мне не нужно беспокоиться о проверке даты, которая будет передана, она будет действительна как для текущего, так и для следующего года).