2015-08-06 3 views
0

Мне нужен метод, который преобразует строку в datetime. Формат для даты и времени должен быть dd/MM/yyyy Если строка находится в любом другом формате, метод возвращает null.DateTime.TryParseExact failed

Это Ват я до сих пор:

private DateTime? StringToDateTime(string value) 
    { 
     DateTime? Result = null; 
     DateTime test = DateTime.Now.Date; 
     if (DateTime.TryParseExact(value, "dd/MM/yyyy", System.Globalization.CultureInfo.InstalledUICulture, System.Globalization.DateTimeStyles.None, out test)) 
      Result = test; 
     return Result; 
    } 

и проверить его я использую этот

private void button1_Click(object sender, EventArgs e) 
    { 
     string value = "01/01/2015"; 
     DateTime? test = StringToDateTime(value); 
     if (test == null) 
      MessageBox.Show("invalid date entered"); 
     else 
      MessageBox.Show(test.ToString()); 
    } 

Теперь проблема заключается в том, что TryParseExact всегда терпит неудачу. Я также пробовал "dd/mm/yyyy" как формат, но с теми же результатами.

Так что я должен делать что-то не так. Есть ли у кого-нибудь пример использования DateTime.TryParseExact или есть ли другой способ сделать это?

EDIT: Это не дубликат, так как «дубликат» ссылка советует использовать TryParseExact в то время как мой вопрос, используя это с самого начала, и спрашивает, почему он не работает

+0

Возможный дубликат [проверка действительной даты с помощью метода DateTime.TryParse] (http://stackoverflow.com/questions/11310439/valid-date-check-with-datetime-tryparse-method) – Liam

+0

Работает для меня. Можете ли вы опубликовать короткую, но полную программу, которая показывает ошибку? – Chris

+0

Что такое 'значение' точно? Не могли бы вы отладить свой код и рассказать нам? А что такое 'InstalledUICulture'? Без этой информации невозможно помочь вам. –

ответ

4

Изменить код:

DateTime? Result = null; 
DateTime test = DateTime.Now.Date; 
if (DateTime.TryParseExact(value, "dd/MM/yyyy", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out test)) 
    Result = test; 

изменение заключается в использовании CultureInfo.InvariantCulture вместо CultureInfo.InstalledUICulture.

+0

Да, InvariantCulture делает трюк. – GuidoG

Смежные вопросы