DateTime. Теперь - первые и последние минуты дня

Есть ли любой простой способ добраться DateTime.Now"TimeMin"и"TimeMax"?

41
задан shA.t 10 September 2017 в 15:59
поделиться

4 ответа

Вот два расширения, которые я использую именно для этого.

    /// <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());
94
ответ дан 27 November 2019 в 00:12
поделиться

Я бы использовал следующее:

DateTime now = DateTime.Now;
DateTime startOfDay = now.Date;
DateTime endOfDay = startOfDay.AddDays(1);

и использовал вместо <= endOfDay . Это будет означать, что он будет работать независимо от того, какая точность - минуты, секунды, миллисекунды, тики или что-то еще. Это предотвратит ошибки, подобные той, что была у нас в StackOverflow (хотя совет игнорировался ).

Обратите внимание, что важно вызывать DateTime.Now только один раз, если вы хотите, чтобы начало и конец одного и того же дня.

12
ответ дан 27 November 2019 в 00:12
поделиться

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)
10
ответ дан 27 November 2019 в 00:12
поделиться

Как и другие ответившие, я не совсем понимаю, о чем вы спрашиваете, но если вам нужно наименьшее возможное время и наибольшее возможное время (не только в день), то есть DateTime.MinValue и DateTime.MaxValue, которые возвращают 1/1/0001 12:00:00 AM и 12/31/9999 11:59:59 PM соответственно.

1
ответ дан 27 November 2019 в 00:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: