Как уже прокомментировали другие, DateTime
не хранит никакой отображаемой информации.
При наведении курсора на вашу переменную в отладчике вызывается ToString()
, и отображается значение для вашей текущей среды.Скорее всего, вы находитесь в среде с 12-часовым форматом.
Чтобы получить фактический час, вы должны использовать свойство Hour
:
DateTime Temp = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, site.start.Hour, site.start.Minute, 0);
//should be 23
var tempHour = Temp.Hour;
У вас есть различные строки формата , который ToString
может использовать.Если дополнительный параметр IFormatProvider
(например, CultureInfo
) не задан, строка отображается в текущей культуре потоков.
Поэтому, когда вы хотите отобразить егов определенной культуре используйте строку культуры и форматирования, которые вы хотите:
var cultureInfo = new CultureInfo("de-DE") // germany has 24 hour clock for example
var str = Temp.ToString("g", cultureInfo);
В общем, меняйте культуру только в том случае, если вы хотите отображать дату в определенной культуре.В большинстве случаев мы не хотим ограничивать его, поэтому он всегда соответствует формату, ожидаемому вашим пользователем.