2015-09-03 3 views
1

У меня есть следующий код. То, что я пытаюсь сделать, это если это нулевое значение для даты return NULL или вернуть короткую дату. Пример: 12/12/15. Я получаю сообщение об ошибке:Convert String to shortdate time

When converting a string to DateTime parse the string to take the date before putting each variable into the DateTime Object.

public DateTime? StrToDate(string val) 
{  
    DateTime? dt = string.IsNullOrEmpty(val) 
     ? (DateTime?)null 
     : DateTime.ParseExact(val, "MM/dd/yyyy", null);  
    return dt; 
} 
+0

Какую строку вы переходите к функции? – JoaoFSA

+2

Прежде всего, где именно вы получаете эту ошибку? Это не ошибка, которую я когда-либо видел. Во-вторых, вы пропускаете 2 цифры за год, но метод разбора явно ищет 4. – DavidG

ответ

2

Чуть более перспективным решением будет использовать TryParseExact(). Также в случае с TryParseExact или ParseExact он принимает только предоставленный формат строки, чтобы проанализировать его на DateTime.

public static DateTime? StrToDate(string val) 
    { 
     CultureInfo enUS = new CultureInfo("en-US"); 
     DateTime dateValue; 
     if (DateTime.TryParseExact(val, "MM/dd/yyyy", enUS, 
            DateTimeStyles.AllowWhiteSpaces, out dateValue)) 
     { 
      return (dateValue); 
     } 
     else 
     { 
      return null; 
     } 
    } 

Теперь тестовые примеры были бы как:

 // Valid date 
     var date = StrToDate("05/01/2000"); 

     // Null 
     var nulldateFromEmpty = StrToDate(string.Empty); 

     // Null 
     var nullDateFromNullString = StrToDate(null); 

Update: случай, если вы ожидаете, чтобы вернуться именно «12/12/15», то объект DateTime представляет собой с структур все поля даты и времени, поэтому даже если значение анализируется из строки ShortDateTime (12/12/15), объект будет иметь значения по умолчанию для времени, т.е. «12:00:00 AM». Для того, чтобы преобразовать эти значения можно снова назвать var date = StrToDate("05/01/2015").Value.ToString("MM/dd/yy");

-1

Дайте этому попытку:

уаг DateTime = Convert.ToDateTime ("25 ноября 1992 года");

return datetime.ToShortDateString();