DateTime.ParseExact не работает в C #, преобразование формата даты не работает - PullRequest
0 голосов
/ 30 июня 2019

Время разбора не работает, так как я хочу преобразовать «13-06-2019 00:00:00» (дд-мм-гггг ЧЧ: мм: сс) в «06-13-2019 00:00:00» (ММ-дд-гггг ЧЧ: мм: сс)

пробовал с Convert.toDateTime() и DateTime.ParseExact()

IFormatProvider culture = new CultureInfo("en-US");
var a = DateTime.ParseExact(a, "MM-dd-yyyy hh:mm:ss", CultureInfo.InvariantCulture);
var b = DateTime.ParseExact(a, "yyyy-MM-dd HH:mm:ss", null);
var c = DateTime.ParseExact(a, "yyyy-MM-dd HH:mm:ss", culture);

В нем ничего не работает

Ответы [ 2 ]

3 голосов
/ 30 июня 2019

DateTime структура использует григорианский календарь под капотом, и в этом календаре нет 13-го месяца.

Итак, синтаксический анализ 13 с MM спецификатором неверен. Я сильно подозреваю, что вы пытаетесь использовать формат dd-MM-yyyy HH:mm:ss.

string a = "13-06-2019 00:00:00";
DateTime  b = DateTime.ParseExact(a, "dd-MM-yyyy HH:mm:ss", CultureInfo.InvariantCulture);

Здесь демонстрация

Ваш второй и третий примеры также не работают, поскольку их форматы полностью отличаются от вашей строки. Когда вы анализируете вашу строку с помощью ParseExact метода , , ваши строки и ваш формат должны точно соответствовать .

Также хочу отметить, что оба спецификатора hh и HH будут работать в моем примере кода. Но, как правило, использование формата dd-MM-yyyy HH:mm:ss является гораздо более распространенным и надежным, чем другой вариант.

1 голос
/ 30 июня 2019

Параметр формата DateTime.ParseExact (дата, формат, культура) - это исходный формат строки даты, которую нужно преобразовать, а возвращаемое значение - это тип даты, который можно преобразовать обратно в строку в соответствии с требуемым форматом.

var a = "13-06-2019 00:00:00";

IFormatProvider culture = new CultureInfo("en-US");
DateTime b = DateTime.ParseExact(a, "dd-MM-yyyy hh:mm:ss", CultureInfo.InvariantCulture);

Console.WriteLine($"{b:MM-dd-yyyy HH:mm:ss}");

...