Лучший способ создать Midnight DateTime на C #

79

Мне нужно создать полночь DateTime

Я только что сделал это:

DateTime endTime = DateTime.Now;
endTime.Subtract(endTime.TimeOfDay);

Еще не тестировал, я предполагаю, что он работает, но есть ли способ лучше / чище?

endian
источник

Ответы:

167

Просто используйте foo.Date, или DateTime.Todayдля сегодняшней даты

Марк Гравелл
источник
1
Стоит учесть, что люди обычно думают о полуночи как о последней секунде дня, тогда как это дает первую секунду дня (а это другая полночь). Так что, если вы намереваетесь реализовать популярное значение полуночи, см. Ответ Аруны ниже (и комментарий
Пола Суарта
@ jdoer1997 - это зависит от того, что ваше приложение должно делать в полночь. Приложения, зависящие от даты, дня недели и т. Д., Могут захотеть выполнить домашние задания с первого тика нового дня.
LT Dan
15
DateTime endTime = DateTime.Now.Date;

Теперь endTime.TimeOfDay.ToString()возвращается"00:00:00"

зендар
источник
11

Вы можете использовать DateTime.Todayс точными секундами полуночи.

    DateTime today = DateTime.Today;
    DateTime mid = today.AddDays(1).AddSeconds(-1);
    Console.WriteLine(string.Format("Today: {0} , Mid Night: {1}", today.ToString(), mid.ToString()));

    Console.ReadLine();

Это должно напечатать:

Today: 11/24/2016 10:00:00 AM , Mid Night: 11/24/2016 11:59:59 PM
Аруна
источник
Это очень помогло, и это именно то, что я хотел
Маттиас Маккарти,
4
Полночь - первая, самая первая секунда дня, а не последняя.
Paul Suart
0
var dateMidnight = DateTime.ParseExact(DateTime.Now.ToString("yyyyMMdd"), "yyyyMMdd", CultureInfo.InvariantCulture);
Питер
источник
3
Помимо кода, добавьте дополнительную информацию о том, почему ваше решение работает и чем оно отличается от предыдущих решений.
wlh
-1
    private bool IsServiceDatabaseProcessReadyToStart()
    {
        bool isGoodParms = true;
        DateTime currentTime = DateTime.Now;
        //24 Hour Clock
        string[] timeSpan = currentTime.ToString("HH:mm:ss").Split(':');
        //Default to Noon
        int hr = 12;
        int mn = 0;
        int sc = 0;

        if (!string.IsNullOrEmpty(timeSpan[0]))
        {
            hr = Convert.ToInt32(timeSpan[0]);
        }
        else
        {
            isGoodParms = false;
        }

        if (!string.IsNullOrEmpty(timeSpan[1]))
        {
            mn = Convert.ToInt32(timeSpan[1]);
        }
        else
        {
            isGoodParms = false;
        }

        if (!string.IsNullOrEmpty(timeSpan[2]))
        {
            sc = Convert.ToInt32(timeSpan[2]);
        }
        else
        {
            isGoodParms = false;
        }

        if (isGoodParms == true )
        {
            TimeSpan currentTimeSpan = new TimeSpan(hr, mn, sc);
            TimeSpan minTimeSpan = new TimeSpan(0, 0, 0);
            TimeSpan maxTimeSpan = new TimeSpan(0, 04, 59);
            if (currentTimeSpan >= minTimeSpan && currentTimeSpan <= maxTimeSpan)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        else
        {
            return false;
        }
    }
Дэвид Петерсен
источник
Добро пожаловать в StackOverflow. Помимо кода, укажите дополнительные сведения о том, почему ваше решение работает и чем оно отличается от предыдущих решений.
buczek