User1454 Ответов: 3

Преобразование строки в datetime в 24-часовом формате на языке Си#


Привет,
Как преобразовать строку в datetime в 24-часовом формате? Я пробовал несколько методов, но все равно получаю значение формата 12 часов. Например: String strDate = "24/01/2013 00:00:00"
Дата-время дата = дата-время.ParseExact(strDate, "dd/MM/YYYY HH:mm:ss", CultureInfo.Языка и региона существует);
Но это значение равно 24/01/2013 12:00:00. Вместо этого мне нужно "24/01/2013 00:00:00". Пожалуйста, помогите :(.

Patrice T

Я подозреваю, что вы задаете обратный вопрос.
Я думаю, что ваш вопрос должен быть :
"Преобразование строки в 24-часовом формате в datetime в c#"

User1454

:)

3 Ответов

Рейтинг:
23

Richard Deeming

То DateTime тип[^] не имеет формата. Значение хранится как число "тиков" (100 наносекунд) с полуночи 1 января 0001 года н. э. (н. э.) по Григорианскому календарю.

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

Когда вы показываете DateTime для пользователя вы можете использовать стандарт[^] или традиция[^] форматируйте строки, чтобы отобразить их так, как вы хотите.


Sergey Alexandrovich Kryukov

5ед.
—СА

Maciej Los

+5!

User1454

Сэр, я прошел через эти "стандартные строки формата даты и времени" и "пользовательские строки формата даты и времени", которые были очень полезны для меня... !!!!!!!! спасибо большое !!!

Рейтинг:
19

OriginalGriff

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

String strDate = "24/01/2013 00:00:00";
DateTime date = DateTime.ParseExact(strDate, "dd/MM/yyyy HH:mm:ss", CultureInfo.InvariantCulture);
Console.WriteLine(date);
Что дает мне:
24/01/2013 00:00:00

Я подозреваю, что ваш вывод форматирует данные в 12-часовой формат (AM/PM) вместо этого:
Console.WriteLine(date.ToString("dd/MM/yyyy hh:mm:ss"));
Так что попробуй:
Console.WriteLine(date.ToString("dd/MM/yyyy HH:mm:ss"));

Что может ввести вас в заблуждение.


User1454

Извините за это !!!, я дал только "гггг", но все равно он дает мне "15-08-2015 AM 12:00:00". У меня есть сомнения whether..in в любом случае это будет принимать системный формат, потому что любое значение, которое я получаю, точно соответствует моему системному формату. Если я перейду на 24-часовой формат на своем компьютере, я получу необходимый.

OriginalGriff

Это именно то, что есть - если вы не указываете формат, то используется текущий системный формат - и ваш компьютер настроен на использование AM/PM, так что это будет показано. Мой установлен на 24 часа, так что я получаю правильный дисплей.
Сохраненная Дата-Время будет точно такой же (поскольку это число миллисекунд с произвольного момента времени, а не отформатированные дата и время).

Richard Deeming

Это целый ряд галочки (100 наносекунд), не миллисекунды. :)

User1454

Сэр, значит, вы имели в виду, что я должен указать формат, например, как вы указали в своем ответе (дата.ToString("dd/MM/yyyy hh:mm:ss"))? так ли это?

OriginalGriff

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

Две строки формата, которые я показал, дают разные результаты: "hh:mm:ss" всегда будет давать формат AM/PM, независимо от настроек компьютера; "HH:mm:ss" всегда будет давать 24-часовой формат. Вы можете посмотреть здесь:
http://www.codeproject.com/Tips/54577/Formatting-a-DateTime-for-display-format-string-de
Он показывает различные форматы и то, что они делают.
Если вы вообще не указываете формат, то всегда будут использоваться текущие настройки ПК. Таким образом, для отображения отладки в VS и так далее вы всегда получаете свои системные настройки.

User1454

Спасибо вам..... это было очень полезно !!!! :)

OriginalGriff

Всегда пожалуйста!

Рейтинг:
10

virusstorm

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

Пользовательское форматирование даты и времени[^]

String strDate = "24/01/2013 00:00:00"
String strDate = "01/24/2013 00:00:00";

DateTime date = DateTime.Parse(strDate);

Console.WriteLine("My Date: {0:dd/MM/yyyy HH:mm:ss}", date);