在C#中创建午夜DateTime的最佳方法


79

我需要创建一个午夜的DateTime

我已经做到了:

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

还没有测试,我假设它可以工作,但是有没有更好/更干净的方法?

Answers:


167

只需使用foo.DateDateTime.Today今天的日期


1
值得考虑的是,人们通常将午夜视为一天的最后一秒,而这是一天的第一秒(这与午夜不同)。因此,如果您打算完成午夜的通俗含义,请参见下面的Aruna的答案(以及Paul Suart的评论)
jdoer1997 '20

@ jdoer1997-这取决于您的应用程序需要在午夜做什么。取决于日期,星期几等的应用可能希望在新的一天的第一刻完成内部任务。
LT丹


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

这很有帮助,而这正是我想要的
Matthias McCarthy

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.