2014-01-20 3 views
5

Я не могу понять это, где я ошибся?Как я могу разобрать эту строку datetime?

я получил следующую DATETIME строку, и нужно разобрать его DateTime:

string timestr = "1/20/2014 12:05:16 AM" 

И я пытаюсь разобрать его, как это:

DateTime.ParseExact(timestr, 
        "MM/dd/yyyy hh:mm:ss tt", 
        null); 

При попытке сделать это он возвращает

«строка не была признана действительной датой»

Любой отзыв?

ответ

12

MM для 01 к 12

Использование M вместо, который предназначен для 1 к 12.

string timestr = "1/20/2014 12:05:16 AM"; 
var date = DateTime.ParseExact(timestr, 
           "M/dd/yyyy hh:mm:ss tt", 
           CultureInfo.InvariantCulture); 
Console.WriteLine(date); 

Выход будет;

1/20/2014 12:05:16 AM 

Здесь в demonstration.

Дополнительную информацию см. На;

быть также осторожным вашего часового форматирования. hh для 01 до 12, HH для 00 до 23. Если ваш час будет 13, 14 или 15 и т. Д. hh формат не удастся.

И так как вы используете null как IFormatProvider в методе DateTime.ParseExact, это означает, что он использует CurrentCulture по умолчанию. И если это DateSeparator не /, ваш метод выбрасывает FormatExceptionдаже соответствует вашей строке и формату именно потому, что "/" format specifier имеет особое значение в пользовательских форматах даты и времени; заменить меня текущую культуру или suplied-й дата культуры Сепаратор

0

Пробовали ли вы

DateTime returnedDate = new DateTime(); 
DateTime.TryParse(timestr, out returnedDate); 
+0

Если ОП в 'CurrentCulture' не принимает' M/дд/гггг чч: мм: сс tt' в качестве стандартной даты и времени модели, ваш 'DateTime.TryParse' возвращает' false', а ваш 'returnDate' будет' 01/01/0001 00: 00: 00'. –

0

M -The месяц, от 1 до 12.

Спецификатор специального формата «М» представляет месяц как число от 1 до 12 (или от 1 до 13 для календарей, которые имеют 13 месяцев). Однозначный месяц отформатирован без начального нуля.

DateTime.ParseExact(timestr,"M/dd/yyyy hh:mm:ss tt",CultureInfo.InvariantCulture); 

Msdn

0

Пожалуйста, попробуйте

string timestr = "1/20/2014 12:05:16 AM"; 
DateTime dt = new DateTime(); 
DateTime.TryParse(timestr, out dt); 
+1

Пожалуйста, не просто отправьте код, пожалуйста, объясните пользователю, что код делает, чтобы они могли учиться у него, как причина, по которой они пришли к stackoverflow. –

+1

Вы не _have to_ initialize 'out parameter'. 'DateTime dt;' будет достаточно. –

+0

Если OPC 'CurrentCulture' не принимает' M/dd/yyyy hh: mm: ss tt' в качестве стандартного шаблона даты и времени, ваш 'DateTime.TryParse' возвращает' false', а ваш 'dt' будет' 01/01/0001 00: 00: 00'. –

Смежные вопросы