Как установить время до полуночи для текущего дня?
Каждый раз, когда я создаю не-nullable datetime в моем приложении mvc3, он по умолчанию имеет значение now(), где сейчас текущая дата с текущим временем. Я хотел бы по умолчанию использовать его на сегодняшний день с 12am в качестве времени.
Я пытаюсь по умолчанию использовать время в моем mvc... но... следующее не устанавливается в сегодняшнюю дату @12am. Вместо этого он по умолчанию имеет текущую дату и время.
private DateTime _Begin = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 12, 0, 0);
public DateTime Begin { get { return _Begin; } set { _Begin = value; } }
Как я могу установить значение 12am для текущей даты для non-nullable datetime?
Ответы
Ответ 1
Вы можете использовать свойство Date
объекта DateTime - например
DateTime midnight = DateTime.Now.Date;
Итак, ваш пример кода станет
private DateTime _Begin = DateTime.Now.Date;
public DateTime Begin { get { return _Begin; } set { _Begin = value; } }
PS. Возвращаясь к исходному коду, установка часов 12 даст вам время полудня для текущего дня, поэтому вместо этого вы могли бы использовать 0...
var now = DateTime.Now;
new DateTime(now.Year, now.Month, now.Day, 0, 0, 0);
Ответ 2
Я полагаю, что вы ищете DateTime.Today
. В документации говорится:
Объект, для которого установлена сегодняшняя дата, а для компонента времени установлено значение 00:00:00.
http://msdn.microsoft.com/en-us/library/system.datetime.today.aspx
Ваш код будет
DateTime _Begin = DateTime.Today;
Ответ 3
Используя некоторые из приведенных выше рекомендаций, следующая функция и код работают для поиска диапазона дат:
Установите дату, когда компонент времени установлен на 00:00:00
public static DateTime GetDateZeroTime(DateTime date)
{
return new DateTime(date.Year, date.Month, date.Day, 0, 0, 0);
}
Использование
var modifieddatebegin = Tools.Utilities.GetDateZeroTime(form.modifieddatebegin);
var modifieddateend = Tools.Utilities.GetDateZeroTime(form.modifieddateend.AddDays(1));
Ответ 4
Нужно только установить его
DateTime.Now.Date
Console.WriteLine(DateTime.Now.Date.ToString("yyyy-MM-dd HH:mm:ss"));
Console.Read();
Это показывает
"2017-04-08 00:00:00"
на моей машине.
Ответ 5
Большинство предлагаемых решений могут вызвать 1-дневную ошибку в зависимости от времени, связанного с каждой датой. Если вы ищете целое число календарных дней между датами, независимо от времени, связанного с каждой датой, я обнаружил, что это хорошо работает:
return (dateOne.Value.Date - dateTwo.Value.Date).Days;
Ответ 6
Связанные, поэтому я думал, что я буду публиковать для других. Если вы хотите найти UTC начала сегодняшнего дня (для вашего часового пояса), следующий код работает для любого смещения UTC (-23.5 - +23.5). Похоже, что мы добавляем X часов, а затем вычитаем X часов, но важная вещь - это ".Date" после добавления.
double utcOffset= 10.0; // Set to your UTC offset in hours (eg. Melbourne Australia)
var now = DateTime.UtcNow;
var startOfToday = now.AddHours(utcOffset - 24.0).Date;
startOfToday = startOfToday.AddHours(24.0 - utcOffset);
Ответ 7
Попробуй это:
DateTime Date = DateTime.Now.AddHours(-DateTime.Now.Hour).AddMinutes(-DateTime.Now.Minute)
.AddSeconds(-DateTime.Now.Second);
Результат будет выглядеть следующим образом:
29.07.2009 00:00:00