Есть ли любой простой способ добраться DateTime.Now
"TimeMin
"и"TimeMax
"?
Вот два расширения, которые я использую именно для этого.
/// <summary>
/// Gets the 12:00:00 instance of a DateTime
/// </summary>
public static DateTime AbsoluteStart(this DateTime dateTime)
{
return dateTime.Date;
}
/// <summary>
/// Gets the 11:59:59 instance of a DateTime
/// </summary>
public static DateTime AbsoluteEnd(this DateTime dateTime)
{
return AbsoluteStart(dateTime).AddDays(1).AddTicks(-1);
}
Это позволяет вам написать:
DateTime.Now.AbsoluteEnd() || DateTime.Now.AbsoluteStart()
или
DateTime partyTime = new DateTime(1999, 12, 31);
Console.WriteLine("Start := " + partyTime.AbsoluteStart().ToString());
Console.WriteLine("End := " + partyTime.AbsoluteEnd().ToString());
Я бы использовал следующее:
DateTime now = DateTime.Now;
DateTime startOfDay = now.Date;
DateTime endOfDay = startOfDay.AddDays(1);
и использовал
<= endOfDay
. Это будет означать, что он будет работать независимо от того, какая точность - минуты, секунды, миллисекунды, тики или что-то еще. Это предотвратит ошибки, подобные той, что была у нас в StackOverflow (хотя совет игнорировался ).
Обратите внимание, что важно вызывать DateTime.Now
только один раз, если вы хотите, чтобы начало и конец одного и того же дня.
try
//midnight this morning
DateTime timeMin = DateTime.Now.Date;
//one tick before midnight tonight
DateTime timeMax = DateTime.Now.Date.AddDays(1).AddTicks(-1)
Если вы используете это для фильтрации, как предполагают ваши комментарии, вероятно, будет хорошей идеей сохранить DateTime.Now в переменной, на всякий случай, если дата переместится между два звонка. Очень маловероятно, но звоните достаточно раз, и это неизбежно произойдет однажды (точнее, ночью).
DateTime currentDateTime = DateTime.Now;
DateTime timeMin = currentDateTime.Date;
DateTime timeMax = currentDateTime.Date.AddDays(1).AddTicks(-1)
Как и другие ответившие, я не совсем понимаю, о чем вы спрашиваете, но если вам нужно наименьшее возможное время и наибольшее возможное время (не только в день), то есть DateTime.MinValue
и DateTime.MaxValue
, которые возвращают 1/1/0001 12:00:00 AM
и 12/31/9999 11:59:59 PM соответственно.