Преобразование строки dd/mm/yyyy в формат Datetime

Я новичок в DotNet и С#. Я хочу преобразовать строку в формате mm/dd/yyyy в объект DateTime. Я попробовал функцию синтаксического анализа, как показано ниже, но она запускает ошибку времени выполнения.

DateTime dt=DateTime.Parse("24/01/2013");

Любые идеи о том, как я могу преобразовать его в datetime?

Ответ 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"

Для дальнейшего чтения вы должны увидеть: Пользовательские строки формата даты и времени

Ответ 2

использовать DateTime.ParseExact

string strDate = "24/01/2013";
DateTime date = DateTime.ParseExact(strDate, "dd/MM/YYYY", null)

null будет использовать текущую культуру, что несколько опасно. Попробуйте указать определенную культуру.

DateTime date = DateTime.ParseExact(strDate, "dd/MM/YYYY", CultureInfo.InvariantCulture)

Ответ 3

Вы можете использовать формат "dd/MM/yyyy" для его использования в DateTime.ParseExact.

Преобразует указанное строковое представление даты и времени в его Эквивалент DateTime с использованием указанного формата и формат. Формат представления строки должен соответствовать в указанном формате.

DateTime date = DateTime.ParseExact("24/01/2013", "dd/MM/yyyy", CultureInfo.InvariantCulture);

Вот DEMO.

Для получения дополнительной информации ознакомьтесь с Custom Date and Time Format Strings