Der beste Weg, um eine Mitternachts-DateTime in C # zu erstellen


79

Ich muss eine Mitternachts-DateTime erstellen

Ich habe gerade Folgendes getan:

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

Ich habe es noch nicht getestet, ich gehe davon aus, dass es funktioniert, aber gibt es einen besseren / saubereren Weg?

Antworten:


166

Verwenden Sie einfach foo.Dateoder DateTime.Todayfür das heutige Datum


1
Es ist zu bedenken, dass die Menschen Mitternacht im Allgemeinen als die letzte Sekunde des Tages betrachten, während dies die erste Sekunde des Tages ergibt (was eine andere Mitternacht ist). Wenn Sie also die populäre Bedeutung von Mitternacht erreichen
möchten, lesen

@ jdoer1997 - Es hängt davon ab, was Ihre App um Mitternacht tun muss. Apps, die von Datum, Wochentag usw. abhängen, möchten möglicherweise beim ersten Tick in den neuen Tag Haushaltsaufgaben erledigen.
LT Dan


15
DateTime endTime = DateTime.Now.Date;

Kehrt jetzt endTime.TimeOfDay.ToString()zurück"00:00:00"



11

Sie können DateTime.Todaymit genauen Sekunden der Mitternacht verwenden.

    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();

Dies sollte drucken:

Today: 11/24/2016 10:00:00 AM , Mid Night: 11/24/2016 11:59:59 PM

Dies hat sehr geholfen und es ist genau das, was ich wollte
Matthias McCarthy

4
Mitternacht ist die erste - es ist die allererste Sekunde des Tages, nicht die letzte.
Paul Suart

0
var dateMidnight = DateTime.ParseExact(DateTime.Now.ToString("yyyyMMdd"), "yyyyMMdd", CultureInfo.InvariantCulture);

3
Fügen Sie nicht nur Code hinzu, sondern fügen Sie auch einige zusätzliche Details hinzu, warum Ihre Lösung funktioniert und wie sie sich von früheren Lösungen unterscheidet.
Mit

-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;
        }
    }

Willkommen bei StackOverflow. Geben Sie nicht nur Code an, sondern auch einige zusätzliche Details dazu, warum Ihre Lösung funktioniert und wie sie sich von früheren Lösungen unterscheidet.
Buczek
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.