2014-07-09 4 views
0

Я использую ASP.NET MVC, и пользователь приложения сможет кодировать дату со временем. Мне интересно, следует ли использовать функцию DateTime.TryParse, чтобы определить, является ли она допустимой строкой даты даты, или если я должен использовать регулярное выражение в моей модели ViewModel.ASP.NET MVC - проверка строки даты и времени

В случае использования регулярного выражения существует ли существующее регулярное выражение даты и времени? Потому что я не нашел его в формате dd/MM/yyyy hh: mm: ss.

EDIT: Я решил использовать TryParseExact и проверить, действительно ли закодированная дата и время.

Даты Введенные 15/10/2014 13:00 15/10/2014 15:00

Вот что я делаю:

DateTime dtS; 
DateTime dtE; 
DateTimeFormatInfo fmt = (new CultureInfo("fr-FR")).DateTimeFormat; 
bool validStart = DateTime.TryParseExact(svm.StartApp, "dd/MM/yyyy HH:mm:ss", fmt, DateTimeStyles.None, out dtS); 
bool validEnd = DateTime.TryParseExact(svm.EndApp, "dd/MM/yyyy HH:mm:ss", fmt, DateTimeStyles.None, out dtE); 

if (!validStart || !validEnd) 
{ 
    return RedirectToAction("Index"); 
} 

Мои BOOL переменные получают ложные и я не понимаю, почему. Есть идеи?

+0

Вы можете использовать некоторые формы даты/времени сборщика? Это будет намного лучше, чем одно текстовое поле, которое может быть заполнено в различных форматах ... –

+2

По моему скромному мнению TryParse - идеальное решение (лучше, чем регулярное выражение). –

+0

@pwas: Единственным недостатком является то, что он доступен только на стороне сервера. Часто рекомендуется иметь регулярное выражение на стороне клиента, а затем (очевидно) проверить на стороне сервера тоже. –

ответ

1

Ошибка была произведена при получении секунд. У вас нет секунд в строке.

Сейчас работает:

DateTime dtS; 
DateTime dtE; 
bool validStart = DateTime.TryParseExact("15/10/2014 13:00", "dd/MM/yyyy HH:mm", new CultureInfo("fr-FR"), DateTimeStyles.None, out dtS); 
bool validEnd = DateTime.TryParseExact("15/10/2014 13:00", "dd/MM/yyyy HH:mm", new CultureInfo("fr-FR"), DateTimeStyles.None, out dtE); 
Смежные вопросы