Проблема с форматом Datetime: строка не была распознана как допустимая DateTime

Я хочу отформатировать входную строку в ММ/ДД/гггг чч:мм:СС формат в C#.
Входная строка находится в формате MM/dd/yyyy hh:mm:ss
Например :"04/30/2013 23:00"

пробовал Convert.ToDateTime() функция, но она рассматривает 4 как дату и 3 как месяц, что не то, что я хочу. На самом деле месяц-04 и дата 03.

пробовал DateTime.ParseExact() функция также, но получение исключения.

Я получаю ошибку:

строка не была распознана как допустимое время DateTime.

6 ответов


строка времени даты не содержит секунд. Вы должны отразить это в своем формате (удалите :ss).
Также необходимо указать H вместо h Если вы используете 24-часовой раз:

DateTime.ParseExact("04/30/2013 23:00", "MM/dd/yyyy HH:mm", CultureInfo.InvariantCulture)

см. здесь для получения дополнительной информации:

пользовательские строки формата даты и времени


можно использовать DateTime.ParseExact() метод.

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

DateTime date = DateTime.ParseExact("04/30/2013 23:00", 
                                    "MM/dd/yyyy HH:mm", 
                                    CultureInfo.InvariantCulture);

здесь DEMO.

hh для 12-часовых часов с 01 до 12,HH is для 24-часовых часов с 00 до 23.

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


попробуйте это:

string strTime = "04/30/2013 23:00";
DateTime dtTime;
if(DateTime.TryParseExact(strTime, "MM/dd/yyyy HH:mm",  
   System.Globalization.CultureInfo.InvariantCulture, 
   System.Globalization.DateTimeStyles.None, out dtTime))
 {
    Console.WriteLine(dtTime);
 }

измените культуру и попробуйте, как это может сработать для вас

string[] formats= { "MM/dd/yyyy HH:mm" }
var dateTime = DateTime.ParseExact("04/30/2013 23:00", 
     formats, new CultureInfo("en-US"), DateTimeStyles.None);

Проверьте детали:DateTime.Parseexact Метод (Строка, String[], Объекта Iformatprovider, DateTimeStyles)


DateTime dt1 = DateTime.ParseExact([YourDate], "dd-MM-yyyy HH:mm:ss",  
                                           CultureInfo.InvariantCulture);

обратите внимание на использование HH (24-часовые часы), а не hh (12-часовые часы), и использование инвариантной культуры, потому что некоторые культуры используют сепараторы, отличные от косой черты.

например, если культура de-DE, формат "dd/MM / yyyy" будет ожидать период в качестве разделителя (31.01.2011).


ниже код работал для меня:

string _stDate = Convert.ToDateTime(DateTime.Today.AddMonths(-12)).ToString("MM/dd/yyyy");
String format ="MM/dd/yyyy";
IFormatProvider culture = new System.Globalization.CultureInfo("fr-FR", true);
DateTime _Startdate = DateTime.ParseExact(_stDate, format, culture);