Ich verwende ein System.DateTime
Objekt, damit ein Benutzer einen Datumsbereich auswählen kann. Der Benutzer kann ein Datum (nicht eine Uhrzeit) nur mithilfe eines Kalenders eines Drittanbieters auswählen. Daher muss ich automatisch die Uhrzeit angeben, die nach dem Datum verwendet werden soll (dh: 00:00:00 oder 23:59:59) ist gewählt.
Wie kann ich die Zeit angeben, nachdem das Datum bereits von der Kalenderauswahl als DateTime-Objekt gespeichert wurde? Ich könnte die AddHours, AddMinutes, AddSeconds
Methoden verwenden, aber diese beziehen sich auf die aktuelle Zeit, die möglicherweise nicht 00:00:00 ist.
Sie startDate
müssen eine Zeit von 00:00:00 und endDate
eine Zeit von 23:59:59 haben, um die gesamten Tage zu berücksichtigen.
Antworten:
Wenn Sie bereits ein
DateTime
Objekt erstellt haben und die Uhrzeit durch die Uhrzeit für das angegebene Datum um 23:59:59 Uhr ersetzen möchten, können Sie die.Date
Eigenschaft verwenden, um das Datum mit der auf 00:00:00 Uhr eingestellten Uhrzeit abzurufen und dann die Stunden hinzuzufügen. Minuten und Sekunden. Zum Beispiel:var dt = yourDateInstance.Date.AddHours(23).AddMinutes(59).AddSeconds(59);
Wenn Sie bis spätestens 23:59:59 Uhr meinen, sollte dies auch funktionieren:
var dt = new DateTime(Now.Year, Now.Month, Now.Day, 23, 59, 59);
quelle
Um den letzten Augenblick für heute zu bekommen:
DateTime d = new DateTime(Now.Year, Now.Month, Now.Day); d = d.AddDays(1); d = d.AddTicks(-1);
Als Antwort auf Ihre Bearbeitung würde ich Folgendes tun:
DateTime start = new DateTime(Now.Year, Now.Month, Now.Day); DateTime end = start.AddDays(1).AddTicks(-1); // Or - just use end = start.AddDays(1), and use a < for comparison
quelle
DateTime d = DateTime.Today.AddDays(1).AddTicks(-1);
quelle
Ihre Frage wurde bereits beantwortet, aber meiner Meinung nach ist es besser, nicht zu versuchen, einen Tick, eine Sekunde oder was auch immer vom Ende des Bereichs zu subtrahieren und mit weniger als zu vergleichen.
Wenn Sie also alle Daten in einem inklusiven Bereich von startDate bis endDate haben möchten und die Uhrzeit ignorieren möchten, können Sie in C # Folgendes verwenden:
if ((myDate >= startDate.Date) && (myDate < endDate.Date.AddDays(1))) { // ... it's in the range }
oder in T-SQL, vorausgesetzt, Ihr @StartDate und @EndDate sind genau Mitternacht, so etwas wie:
WHERE SomeDate >= @StartDate AND SomeDate < DATEADD(d,1,@EndDate)
AKTUALISIEREN
Das Beispiel wurde aktualisiert, um einen inklusiven Bereich als Antwort auf Kommentare anzuzeigen.
quelle
DateTime startDate = DateTime.Today; DateTime stopDate = startDate.AddDays(1).AddTicks(-1);
Als Hinweis:
DateTime.Today
Rückgabe (von MSDN)Fügen Sie also, wie andere angemerkt haben, einen Tag hinzu, subtrahieren Sie dann das kleinste Zeitquantum (ein Häkchen) und Sie erhalten die letztmögliche Zeit für den aktuellen Tag.
Natürlich müssen Sie möglicherweise über Zeitzonen und dergleichen nachdenken, je nachdem, wo der Code ausgeführt wird und wo sich der Benutzer befindet. Die UTC-Zeit mag gut sein, aber das könnte Sie einen Tag (so oder so) stören, je nachdem, wo Ihr Code ausgeführt wird.
quelle
Basierend auf den anderen Antworten habe ich diese praktische Erweiterungsmethode erstellt:
public static class DateTimeExtensions { public static DateTime EndOfDay(this DateTime dateTime) { return dateTime.Date.AddDays(1).AddTicks(-1); } }
quelle
Zum Beispiel
DateTime.Now.Date.AddDays(1).AddSeconds(-1)
Oder
AddTicks/AddMilliseconds/AddMinutes
... basierend auf der Präzision, die Sie benötigen.quelle
Warum nicht die Erweiterung ToDayEnd () ?
/// <summary> /// Gets the value of the End of the day (23:59) /// </summary> /// <param name="target"></param> /// <returns></returns> public static DateTime ToDayEnd(this DateTime target) { return target.Date.AddDays(1).AddMilliseconds(-1); }
Aber wenn Sie wirklich das absolute Ende des Tages meinen würden, dann ist AddTicks (-1) die Antwort.
quelle
yourDateInstance.CloseDate = yourDateInstance.CloseDate.Date.AddDays (1) .AddMilliseconds (-1);
quelle
Verwenden einer Erweiterungsmethode
public static DateTime EndOfTheDay(this DateTime date) { return new DateTime(date.Year, date.Month, date.Day).AddDays(1).AddTicks(-1); }
Das Ergebnis hier liefert Ihnen die spätestmögliche Zeit, indem Sie den Beginn des Tages ermitteln. Fügen Sie einen Tag hinzu und subtrahieren Sie dann einen Tick. Andere Methoden fügen Stunden, Minuten und Sekunden hinzu. Diese Lösungen in Abhängigkeit von den Codefunktionen verursachen jedoch jederzeit Probleme zwischen 23: 59: 59.000000 und 23: 59: 59.999999
Wenn ich beispielsweise wissen möchte, ob ein Wert vor einem bestimmten Enddatum / einer bestimmten Endzeit liegt, besteht bei anderen Lösungen die Möglichkeit, dass Werte im Millisekundenbereich fehlen.
quelle
benutze das
DateTime YourNewDate = new DateTime (YourDate .Year, YourDate .Month, YourDate .Day, 23, 59, 59, 99);
quelle
Dadurch erhalten Sie das erwartete Ergebnis:
DateTime startDate= DateTime.Now.Date; DateTime endDate= startDate.AddDays(2).Add(new TimeSpan(23, 59, 59)); //startDate: 28/9/2017 0:0:0 endDate: 29/9/2017 23:59:59
quelle