Разбор строки в DateTime, форматирование, а затем обратно в строку - C # - PullRequest
1 голос
/ 12 декабря 2011

Я извлекаю дату / время из базы данных MS SQL Server 2008 и пытаюсь отформатировать дату так, чтобы она отображалась только в формате «дд / мм / гггг».

Данные в БД выглядят следующим образом:

2011-05-04 15:50:00.000

Неформатированная строка при отображении выглядит следующим образом:

5/25/2011 8:47:00 AM

Однако этот код не выполняется, когда я пытаюсьпроанализируйте его в правильном формате:

DateTime dateA = DateTime.ParseExact(curShopDate, "ddMMyyyy", System.Globalization.CultureInfo.InvariantCulture);
curShopDate = dateA.ToString();

Я также попробовал этот код, пытаясь отделить только часть даты от времени:

string[] stringA = curShopDate.Split(' ');
DateTime dateA = DateTime.ParseExact(stringA[0], "ddMMyyyy", System.Globalization.CultureInfo.InvariantCulture);
curShopDate = dateA.ToString();

Обе версии потерпели крах с "Stringне был признан действительным DateTime. "ошибка.

Ответы [ 3 ]

4 голосов
/ 12 декабря 2011

Проблема связана с вашим параметром формата. Ваша строка не в формате ddMMyyyy, она в формате M/dd/yyyy:

string curShopDate = "5/25/2011 8:47:00 AM";
DateTime dateA = DateTime.ParseExact(curShopDate.Split(' ')[0], "M/dd/yyyy",
                              System.Globalization.CultureInfo.InvariantCulture);

Вы также можете проанализировать строку, не удаляя время с даты:

string curShopDate = "5/25/2011 8:47:00 AM";
DateTime dateA = DateTime.ParseExact(curShopDate, "M/dd/yyyy h:mm:ss tt", 
                              System.Globalization.CultureInfo.InvariantCulture);
2 голосов
/ 12 декабря 2011

Согласно MSDN :

Метод DateTime.ParseExact (String, String, IFormatProvider) анализирует строковое представление даты, которое должно быть в формате, определенном какпараметр формата.Также требуется, чтобы элементы и строкового представления даты и времени отображались в порядке, заданном форматом, и чтобы в них не было пробелов, кроме разрешенного форматом.

Итак, еслиЯ правильно понял, вы указали формат как "ddMMyyyy", но ваша строка в "M / dd / yyyy h: mm: ss tt".Попробуйте изменить формат на «M / dd / гггг ч: мм: сс тт» или переключиться на DateTime.TryParse ().

0 голосов
/ 12 декабря 2011

Если вы используете ParseExact, то вы должны указать точный формат: "M/d/yyyy h:mm:ss tt", который соответствует вашей строке даты "5/25/2011 8:47:00 AM".

Вы можете взять компонент даты даты / времени с помощью:

DateTime dateTime = DateTime.Now;
DateTime dateOnly = dateTime.Date;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...