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?

Endian
quelle

Antworten:

166

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

Marc Gravell
quelle
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.Today

mmiika
quelle
15
DateTime endTime = DateTime.Now.Date;

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

Zendar
quelle
15

DateTime.Now. AddDays(1).Date

WebDude
quelle
13
Ich finde DateTime.Today.AddDays(1)es schöner als das.
Ian Grainger
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
Aruna
quelle
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);
Peter
quelle
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;
        }
    }
David Petersen
quelle
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