Почему быDateTime.TryParseExact не возвращает правильный ответ
DateTime.TryParseExact("08/10/2013", "dd/MM/yyyy", null, DateTimeStyles.None, out dateValue)
возвращение ложным?
Почему быDateTime.TryParseExact не возвращает правильный ответ
DateTime.TryParseExact("08/10/2013", "dd/MM/yyyy", null, DateTimeStyles.None, out dateValue)
возвращение ложным?
Использовать CultureInfo.InvariantCulture
вместо null
.
Он сообщает компилятору, что формат не зависит от культуры.
DateTime.TryParseExact("08/10/2013",
"dd/MM/yyyy",
CultureInfo.InvariantCulture,
DateTimeStyles.None,
out dateValue);`
Если вы используете null
, он выводится в CultureInfo.CurrentCulture
(MSDN: «Если поставщик имеет нулевое значение, объект CultureInfo, который соответствует текущей культуре используется»). Кроме того, поскольку это не так понятно, проблема заключается в том, что/заменяется предоставленным датой сепаратором. Это имеет особое значение. http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx#dateSeparator
Вот пример работает
Вы также должны указать, что 'null' совпадает с' CultureInfo.CurrentCulture' (msdn: _ "Если поставщик имеет значение null, объект CultureInfo, соответствующий текущей культуре, используется" _). Кроме того, поскольку это не так ясно, проблема в том, что '/' заменяется предоставленным датой-разделителем культуры. Это имеет особое значение. http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx#dateSeparator –
Потому что вы передали null
для параметра IFormatProvider. Попробуйте Попутный CultureInfo.InvariantCulture вместо
EDIT Как уже упоминалось другие, реальная причина заключается в том, что /
в строке разбора сама пересчитываются с использованием правил, предусмотренных IFormatProvider
. Когда вы передаете null
, используется значение по умолчанию CultureInfo.CurrentCulture.
Следует упомянуть, что 'null' совпадает с' CultureInfo.CurrentCulture' (msdn: _ "Если поставщик имеет значение null, объект CultureInfo, соответствующий текущей культуре, используется" _). –
Мое решение:
общественности статической BOOL IsValidDateTime (строка sDateTime) { BOOL RET = ложь;
string[] formats = {
"dd/MM/yyyy HH:mm:ss",
"yyyy-MM-dd HH:mm:ss",
"yyyy-MM-ddTHH:mm:sszzz"
};
try{
DateTime.ParseExact(sDateTime, formats, CultureInfo.InvariantCulture, DateTimeStyles.None);
ret = true;
}
catch{}
return ret;
}
Потому что/ist заполнитель для конкретного сепаратора в текущей культуре. Если культура в настоящее время является немецкой/будет актуальной - и это не в дате. – Ralf