2012-11-20 5 views
38

Jedes Mal, wenn ich in meiner mvc3-Anwendung eine nicht-nullbare Datetime erzeuge, wird jetzt standardmäßig() verwendet, wobei jetzt das aktuelle Datum mit der aktuellen Uhrzeit angezeigt wird. Ich würde es gerne auf das heutige Datum um 12 Uhr als Uhrzeit einstellen.Wie stelle ich die Zeit auf Mitternacht für den aktuellen Tag ein?

Ich versuche, die Zeit in meinem mvc voreinzustellen ... aber ... die folgende Einstellung ist nicht auf das heutige Datum @ 12 Uhr. Stattdessen wird jetzt standardmäßig das aktuelle Datum und die aktuelle Uhrzeit verwendet.

Wie kann ich auf 12 Uhr für das aktuelle Datum für nicht-Nullable Datetime festlegen?

Antwort

67

können Sie die Date Eigenschaft des Objekts verwenden Datetime - zB

DateTime midnight = DateTime.Now.Date; 

Ihr Codebeispiel wird also

private DateTime _Begin = DateTime.Now.Date; 
public DateTime Begin { get { return _Begin; } set { _Begin = value; } } 

PS. Gehen Sie zurück zu Ihrem ursprünglichen Code, um die Stunden zu Einstellung gibt Ihnen Zeit von Mittag für den aktuellen Tag, so stattdessen haben Sie ...

var now = DateTime.Now; 
new DateTime(now.Year, now.Month, now.Day, 0, 0, 0); 
+10

Es ist auch 'DateTime.Today' –

+2

@Erv Tat Wenn Sie reflektieren (disassemblieren Sie die M $ dll) finden Sie 'Today' ist einfach ein Wrapper für 'DateTime.Now.Date' - so persönlich finde ich das zeigt nur ein wenig mehr Absicht in meinem Code ... –

+0

Ich stimme nicht zu . Heute impliziert genau das, was es sagt. Ich nehme nie Zeit an, wenn ich über einen Tag spreche. Zu sagen, Now.Date ist übermäßig ausführlich. –

-1

Try it ......

DateTime Date = DateTime.Now.AddHours(-DateTime.Now.Hour).AddMinutes(-DateTime.Now.Minute).AddSeconds(-DateTime.Now.Second);

Ausgang ...

07/29/2015 00:00:00

+0

Diese Frage hat bereits eine gut angenommene und akzeptierte Antwort. Bitte lesen Sie es und seine Kommentare - sie erklären, warum Ihr Ansatz wirklich keine gute Idee ist. – vesan

0

einige der oben genannten Empfehlungen verwenden, die folgende Funktion und Code arbeiten für die Suche einen Datumsbereich:

Set Datum mit der Zeit Komponentensatz bis 00:00:00

public static DateTime GetDateZeroTime(DateTime date) 
{ 
    return new DateTime(date.Year, date.Month, date.Day, 0, 0, 0); 
} 

Nutzungs

var modifieddatebegin = Tools.Utilities.GetDateZeroTime(form.modifieddatebegin); 

var modifieddateend = Tools.Utilities.GetDateZeroTime(form.modifieddateend.AddDays(1)); 
+0

Ihre GetDateZeroTime-Implementierung entspricht dem Zugriff auf die Date-Eigenschaft des DateTime-Objekts, d. H. date.Date – user3074376

1

müssen es nur

DateTime.Now.Date

 Console.WriteLine(DateTime.Now.Date.ToString("yyyy-MM-dd HH:mm:ss")); 
     Console.Read(); 

     It shows "2017-04-08 00:00:00" on my machine. 
0

Die meisten der vorgeschlagenen Lösungen setzen einen 1 Tag Fehler in Abhängigkeit von der Zeit, die mit jedem Tag führen kann.Wenn Sie für eine ganze Anzahl von Kalendertagen zwischen zu Terminen, unabhängig von der Zeit, die mit jedem Zeitpunkt, dann habe ich festgestellt, dass dies funktioniert gut:

return (dateOne.Value.Date - dateTwo.Value.Date).Days; 
Verwandte Themen