2014-02-13 2 views
0

Я передаю дату в строке запроса как формат 02-2014.и использую эту дату Я выполнил поиск. Он работает, и результат прекрасен. Но когда я меняю значение строки запроса в браузере, то ошибка будет showing.In это состояние мне нужно только какое-то сообщение, так как мы можем проверить значение запроса строки даты в правильном коде format.my являетсяКак проверить формат даты в заданной структуре

string dateToSearch = HttpContext.Current.Request["date"]; 
if (!string.IsNullOrEmpty(dateToSearch)) 
{ 
    dateToSearch = dateToSearch.Trim(); 
    string year = null; 
    string month = null; 
    var dates = dateToSearch.Split("-".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); 
    if (dates.Length > 0) 
    { 
     month = dates[0]; 
     year = dates[1]; 
    } 
} 
+0

попытка получить значение "DateTime"? не могли бы вы отредактировать тему? Может быть, решение может быть проще, чем ваш код. –

+0

", то ошибка покажет" не говорит нам ничего о том, что не так. Я подозреваю, что вы хотите проверить 'if (date.Length == 2)' –

ответ

5

Просто используйте DateTime.TryParseExact с строкой формата MM-yyyy. Это скажет вам, будет ли ваша строка ввода в указанном вами формате, и если да, то она возвращает анализируемый объект DateTime через параметр out.

+0

Хотя это заманчиво, учитывая, что нет заданного дня, я не уверен, что произойдет, если (скажем), текущая дата - 30-е, и вы разобрали 02-2014 ... –

+1

Поскольку ни один день не указан, парсер просто предполагает, что это 1-й из указанного месяца 0: 00: 00.00000 – Georg

+0

Yup, только что подтвердил это сам. Удаление моего ответа. Я бы рекомендовал указать CultureInfo.InvariantCulture, хотя, возможно, вы не хотите использовать календарь текущей культуры по умолчанию. –

1

Попробуйте это:

DateTime date; 
if (DateTime.TryParseExact(text, "MM'-'yyyy", 
          CultureInfo.InvariantCulture, 
          DateTimeStyles.None, 
          out date)) 
{ 
    // Success 
} 
else 
{ 
    // Parse failed 
} 
Смежные вопросы