Ответ 1
Вам нужно использовать DateTime.ParseExact
с форматом "dd/MM/yyyy"
DateTime dt=DateTime.ParseExact("24/01/2013", "dd/MM/yyyy", CultureInfo.InvariantCulture);
Это безопаснее, если вы используете d/M/yyyy
для формата, так как это будет обрабатывать как одиночные цифры, так и двузначные цифры день/месяц. Но это действительно зависит, если вы ожидаете одно/двухзначные значения.
Формат вашей даты day/Month/Year
может быть приемлемым форматом даты для некоторых культур. Например, для канадской культуры en-CA
DateTime.Parse
будет работать как:
DateTime dt = DateTime.Parse("24/01/2013", new CultureInfo("en-CA"));
Или
System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("en-CA");
DateTime dt = DateTime.Parse("24/01/2013"); //uses the current Thread culture
Обе вышеприведенные строки будут работать, потому что формат строки допустим для культуры en-CA
. Поскольку вы не поставляете какую-либо культуру в свой вызов DateTime.Parse
, ваша текущая культура используется для разбора, которая не поддерживает формат даты. Узнайте больше об этом на DateTime.Parse.
Другим методом анализа является DateTime.TryParseExact
DateTime dt;
if (DateTime.TryParseExact("24/01/2013",
"d/M/yyyy",
CultureInfo.InvariantCulture,
DateTimeStyles.None,
out dt))
{
//valid date
}
else
{
//invalid date
}
Группа методов TryParse
в .Net framework не генерирует исключение из недопустимых значений, вместо этого они возвращают значение bool
, указывающее на успех или неудачу при анализе.
Обратите внимание на, что я использовал одиночные d
и M
для дня и месяца соответственно. Одиночные d
и M
работают как для одиночных, так и для двухзначных цифр день и месяц. Таким образом, для формата d/M/yyyy
допустимые значения могут быть:
- "24/01/2013"
- "24/1/2013"
- "4/12/2013" // 4 декабря 2013 г.
- "04/12/2013"
Для дальнейшего чтения вы должны увидеть: Пользовательские строки формата даты и времени