Чуть более перспективным решением будет использовать 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");
Какую строку вы переходите к функции? – JoaoFSA
Прежде всего, где именно вы получаете эту ошибку? Это не ошибка, которую я когда-либо видел. Во-вторых, вы пропускаете 2 цифры за год, но метод разбора явно ищет 4. – DavidG