Member 11355723 Ответов: 3

Преобразование datetime 12 часов в datetime 24 часа


Я хотел преобразовать datetime 12 часов в datetime 24 часа

Я могу сделать это, если преобразую datetime в строковую переменную (string strMaxFormat = modifiedDate.ToString ("yyyy-MM-dd HH:mm:ss");) но я хотел переменную datetime


Мой код:
DateTime modifiedDate = DateTime.Now;
            bool isDayLightSaving = false;

DateTime unixGMTDateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
                    modifiedDate=unixGMTDateTime.AddMilliseconds(Convert.ToDouble(lastModifiedDate));
                    isDayLightSaving = objUTI.checkisDaylightSaving();
 //subtract 330 or 270 minutes based on daylight saving.. Subtraction is done to change time from UTC to local
int systemDTOffset = DateTimeOffset.Now.Minute;
if (isDayLightSaving)
modifiedDate = modifiedDate.AddMinutes(-(systemDTOffset));
else
  modifiedDate = modifiedDate.AddMinutes(-(systemDTOffset - 60));


Что я уже пробовал:

строки strMaxFormat = и modifieddate.ToString ("yyyy-MM-dd HH:mm:ss");

F-ES Sitecore

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

3 Ответов

Рейтинг:
2

Jochen Arndt

То DateTime объект не знает о 12-или 24-часовом формате. Это просто значение, представляющее определенное время.

Я также предлагаю не делать расчеты DST самостоятельно. Используйте предоставленные функции для преобразования между местным временем и UTC (например, DateTime.ToLocalTime() для значения времени UTC). Если вам нужно местное время для других часовых поясов, чем тот, который фактически используется Windows, используйте TimeZoneInfo.Метод ConvertTime (DateTime, TimeZoneInfo, TimeZoneInfo) (Система)[^]. Смотреть также Преобразование Времени Между Часовыми Поясами[^].

При хранении времени и выполнении вычислений всегда делайте это в UTC. Только при отображении их при необходимости преобразуйте в местное время. Если вы этого не сделаете, то рано или поздно получите несоответствия.


Рейтинг:
1

Richard MacCutchan

Нет необходимости в преобразовании. вы просто используете ToString метод с Пользовательские строки формата даты и времени[^].


Рейтинг:
0

Peter Leow

Во-первых, вы должны в разделе, Как значение DateTime представлено в .Net, прочитать этот[^]:

Цитата:
Тип значения DateTime представляет даты и время со значениями в диапазоне от 12:00:00 полуночи 1 января 0001 года Anno Domini или н. э. (Также известный как Common Era или C. E.) до 11:59:59 вечера 31 декабря 9999 года н. э. (C. E.) Эти ограничения хранятся как значения только для чтения в полях MinValue и MaxValue.
Значения времени измеряются в 100-наносекундных единицах, называемых тиками, а конкретная дата выражается как число тиков, прошедших с 12:00 полуночи 1 января 0001 года н. э. Например, значение тика 31241376000000000L представляет собой пятницу, 01 января 0100 12: 00: 00 полуночи.

Проще говоря, значение datatime - это просто запуск галочки[^] начиная с 0 тиков на 1 января 0001 года.
Запустите эту демонстрацию:
using System;
					
public class Program
{
	public static void Main()
	{
		DateTime dateTimeMin = DateTime.MinValue;
		
		DateTime dateTimeMax = DateTime.MaxValue;
		
		long minTicks = dateTimeMin.Ticks;
		
		long maxTicks = dateTimeMax.Ticks;
		
		Console.WriteLine("Min DateTime {0} has ticks of {1}", dateTimeMin, minTicks);
		
		Console.WriteLine("Max DateTime {0} has ticks of {1}", dateTimeMax, maxTicks);
	}
}
Вы получаете:
Min DateTime 1/1/0001 12:00:00 AM has ticks of 0
Max DateTime 12/31/9999 11:59:59 PM has ticks of 3155378975999999999

Чтобы получить количество тиков, прошедших в любом случае, сделайте следующее
DateTime.Now.Ticks
Возвращаясь к вашему вопросу, нет, нет ни 12-часового, ни 24-часового значения даты и времени, многие форматы даты и времени, которые вы видите в этом мире, созданы человеком, они существуют, чтобы соответствовать разнообразным потребностям культуры. Но корневые значения их всех работают тиками в случае .net Framework.