2013-04-12 7 views
1

Мое время и дата хранятся в базе данных в 24-часовом формате. Что я делаю, это использование хранимой процедуры для извлечения требуемой даты и времени и вставки в datatable. Но в datatable он автоматически преобразуется в 12-часовой формат. После извлечения данных из datatable можно преобразовать его в 24-часовой шаблон, но он должен быть преобразован в строку. Но проблема в том, что мне нужно использовать данные для создания диаграммы который будет принимать только формат DateTime. Так что я хочу, это способ конвертировать 12-часовое время в 24-часовой формат времени, не меняя его на строку. Пожалуйста, помогите.хочу время в формате 24 часа в DateTime в C#

+2

'DateTime' struct не имеет формата вообще. Это просто информация о дате и времени. – MarcinJuraszek

+0

http://stackoverflow.com/questions/14518519/why-am-i-getting-this-indexerror-string-index-out-of-range-in-one-case-but-no – eeshwr

ответ

9

Мое время и дата хранятся в базе данных в 24-часовом формате.

Я надеюсь, что они на самом деле не хранятся в любой текстовый формат, но вместо этого в DateTime поле или что-то подобное. Не путайте «что я вижу при запуске SQL-запроса» с «тем, что хранится в базе данных». Так же, как цифры не сохраняются в виде последовательностей десятичных цифр, даты и время не должны храниться как текст.

Но в данных он автоматически преобразуется в 12-часовой формат.

Нет, если вы сделали все правильно должно быть хранить все в DataTable как DateTime. В отладчике вы можете увидеть 12-часовое представление строки, но сам объект должен быть DateTime.

В основном проблема с 12/24 часами - это только симптом настоящей проблемы: ненужные преобразования строк. Отметьте тех вниз (и удалите их), а остальные должны позаботиться о себе. Поэтому, если вы сейчас вызываете ToString(), когда вы извлекаете значение из DataTable, прекратите это делать. Вместо этого, только литой:

DateTime dateTime = (DateTime) row["foo"]; 
+0

Хорошо сказал, Джон. – Brian

+1

спасибо за ответ ... bt есть способ конвертировать datetime в 12-часовой формат в 24-часовой формат без преобразования его в строку (без изменения его типа). –

+1

@ user1919448 Объекты DateTime не сохраняются с учетом конкретного формата. Вы можете получить 24-часовой формат из любого объекта DateTime, например: 'string formatted24HourTime = myDateTime.ToString (" HH: mm ");' – tnw

0

Все, что @Jon сказал, это правильно.

Но если вы только что объяснили себя неправильно, и у вас есть DateTime объект в вашей БД, и вы хотите отформатировать его в 24 ч только при отображении - вы можете использовать «НН» в строчном формате за 24 часа формат.

Например, для myDateTime представляющих 16:00:

var hourPart = String.Format("{0:HH}", myDateTime) 
Console.WriteLine(hourPart); // prints 16, and not 4PM. 
+1

@ Ник, спасибо за редактирование. – evgenyl

2

Из вашего рассказа, я понимаю, что на самом деле DataTable содержит значение DateTime, которое не имеет никакого формата сам по себе, это в основном просто хранит несколько тиков с произвольной даты и времени. То, что вы видите в визуализации вашей таблицы, - это преобразование по умолчанию ToString(), основанное на настройках культуры вашего приложения.

Скорее всего, если вы должны были сделать что-то вроде этого перед запуском существующего кода, формат изменится:

var cultureInfo = new CultureInfo(CultureInfo.CurrentCulture.Name); 
cultureInfo.DateTimeFormat.LongTimePattern = "HH:mm:ss"; 
Thread.CurrentThread.CurrentCulture = cultureInfo; 

Я рекомендовал бы преобразовать в формат ваших предпочтений по телефону ToString Явно однако.Как именно вы это сделаете, это зависит от того, как вы визуализируете данные из DataTable.

+0

Почему вы считаете, что преобразование в строку необходимо вообще? Из вопроса: «Но проблема в том, что мне нужно использовать данные для создания диаграммы, которая будет принимать только формат DateTime». –

+0

@JonSkeet Я не совсем уверен, в чем проблема, но поскольку OP жаловался на неправильный формат, он должен каким-то образом отобразить его, я предположил. – Thorarin

+0

Я подозреваю, что OP преобразуется в строку при получении значения из DataTable, но без какой-либо реальной необходимости делать это. –

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