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


79

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

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

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

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

Ответы:


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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.