Wie kann ich nur die Zeit in meiner DateTime
Variablen "s" ändern ?
DateTime s = some datetime;
Sie können einen DateTime-Wert nicht ändern - er ist unveränderlich. Sie können die Variable jedoch so ändern, dass sie einen neuen Wert hat. Der einfachste Weg, dies zu tun, um nur die Zeit zu ändern, besteht darin, eine Zeitspanne mit der relevanten Zeit zu erstellen und die DateTime.Date-Eigenschaft zu verwenden:
DateTime s = ...;
TimeSpan ts = new TimeSpan(10, 30, 0);
s = s.Date + ts;
s
wird jetzt das gleiche Datum sein, aber um 10.30 Uhr.
Beachten Sie, dass DateTime
Sommerzeitübergänge nicht berücksichtigt werden, die die "naive" Gregorianische Zeit in beide Richtungen darstellen (siehe Abschnitt "Anmerkungen" in den DateTime
Dokumenten ). Die einzigen Ausnahmen sind .Now
und .Today
: Sie rufen die aktuelle Systemzeit ab, die diese Ereignisse widerspiegelt, sobald sie auftreten.
Dies hat mich motiviert, das Noda Time- Projekt zu starten , das jetzt produktionsbereit ist. Sein ZonedDateTime
Typ wird "bekannt gemacht", indem er mit einem tz
Datenbankeintrag verknüpft wird .
Add
Bereitstellung einer Zeitspanne von Null anrufen? Ihr Ausdruck ist gleichbedeutend mits.Date
, aber länger ...DateTime
s haben (eine für das Datum und eine für die Uhrzeit), können Sie dies tun:var result = date.Date + time.TimeOfDay;
time
kein Modell sein sollteDateTime
. (Ich würde natürlich Noda Time verwenden, aber ...)Okay, ich tauche mit meinem Vorschlag ein, einer Erweiterungsmethode:
Dann ruf an:
Es ist wichtig zu beachten, dass diese Erweiterung ein neues Datumsobjekt zurückgibt. Sie können dies also nicht tun:
Aber Sie können dies tun:
quelle
Datetime.Today.Add(time.TimeOfDay)
. Dies liegt daran, dass der Konstruktor intern keine kalenderbasierten Korrekturen vornimmt, außer dass ein Schaltjahr für den Datumsteil berücksichtigt wird. DhDateTime
ist eine "naive" Implementierung in Bezug auf Pythonsdatetime
Modul.Auf diese Weise behalten Sie Ihr Datum bei, während Sie einen neuen Stunden-, Minuten- und Sekunden-Teil nach Ihren Wünschen einfügen.
quelle
.AddMilliseconds()
bei Bedarf.Einzeiler
würde das heutige Datum mit einer Zeit von 4:30:00 zurückbringen, DateTime.Now durch ein beliebiges Datumsobjekt ersetzen
quelle
DateTime ist ein unveränderlicher Typ, daher können Sie ihn nicht ändern .
Sie können jedoch eine neue DateTime-Instanz basierend auf Ihrer vorherigen Instanz erstellen. In Ihrem Fall scheint es so, als ob Sie die Date-Eigenschaft benötigen, und Sie können dann eine Zeitspanne hinzufügen, die die Tageszeit darstellt.
Etwas wie das:
quelle
Wenn Sie die Zeit bereits in einem anderen
DateTime
Objekt gespeichert haben , können Sie dieAdd
Methode verwenden.Die
TimeOfDay
Eigenschaft ist einTimeSpan
Objekt und kann an dieAdd
Methode übergeben werden. Und da wir dieDate
Eigenschaft derdateToUse
Variablen verwenden, erhalten wir nur das Datum und fügen die Zeitspanne hinzu.quelle
Einfachste Lösung:
Und wenn Sie ein bestimmtes Datums- und Uhrzeitformat benötigen:
quelle
Ausgeführt: Heute = 9/04/15 00:00:00
quelle
Geschah bei diesem Beitrag, als ich nach der gleichen Funktionalität suchte, die möglicherweise das tun könnte, was der Typ wollte. Nehmen Sie das ursprüngliche Datum und ersetzen Sie den Zeitteil
quelle
Da
DateTime
unveränderlich ist, muss eine neue Instanz erstellt werden, wenn eine Datumskomponente geändert werden muss. Leider gibt es keine integrierte Funktionalität zum Festlegen einzelner Komponenten einerDateTime
Instanz.Verwenden der folgenden Erweiterungsmethoden
Sie können einzelne
DateTime
Komponenten wie einstellenquelle
Wenn Sie eine DateTime wie 2014/02/05 18:19:51 haben und nur 2014/02/05 möchten, können Sie dies tun:
quelle
Durch Hinzufügen von .Date zu Ihrem Datum wird Mitternacht (00:00) festgelegt.
Hinweis Das äquivavalente SQL ist
CONVERT(DATETIME, CONVERT(DATE, @MyDate))
Was diese Methode so gut macht, ist, dass sie sowohl schnell zu tippen als auch leicht zu lesen ist. Ein Bonus ist, dass es keine Konvertierung von Strings gibt.
Dh Um das heutige Datum auf 23:30 Uhr einzustellen, verwenden Sie:
Sie können DateTime.Now oder MyDate natürlich durch ein beliebiges Datum Ihrer Wahl ersetzen.
quelle
Tatsächlich können Sie die Uhrzeit nach ihrer Erstellung nicht mehr ändern. Sie können es jedoch problemlos mit vielen Konstruktoren erstellen: https://docs.microsoft.com/en-us/dotnet/api/system.datetime.-ctor?view=netframework-4.7.2
Wenn Sie beispielsweise eine DateTime erstellen möchten, die Sekunden ändert, können Sie dies einfach tun:
quelle
quelle
Verwenden Sie
Date.Add
und fügen Sie einNew TimeSpan
mit der neuen Zeit hinzu, die Sie hinzufügen möchtenquelle
DateTime
Verwenden Sie beim Erstellen Ihres Objekts einen Konstruktor, mit dem Sie die Zeit angeben können:Wenn Sie bereits ein
DateTime
Objekt haben und die Zeit ändern möchten, können SieDateTime
mit einfachen Methoden Minuten, Stunden oder Sekunden hinzufügen :Beachten Sie, wie wir das Ergebnis jedes Methodenaufrufs an die
myDateTime
Variable "speichern" müssen . Dies liegt daran, dass dasDateTime
unveränderlich ist und seine Methoden einfach neue Instanzen mit den zusätzlichen Stunden / Minuten / Sekunden erstellen.Wenn Sie sowohl Stunden als auch Minuten (und / oder Sekunden) und dieselbe Zeit hinzufügen müssen, können Sie den Code vereinfachen, indem Sie stattdessen
TimeSpan
dem Original ein hinzufügenDateTime
:Wenn Sie absolute Stunden / Minuten / Sekunden festlegen möchten, anstatt die vorhandenen Werte zu ergänzen, können Sie den oben genannten
DateTime
Konstruktor verwenden und Werte für Jahr / Monat / Tag von früher wiederverwenden:quelle
Hier ist eine Methode, mit der Sie es für Sie tun können. Verwenden Sie es so
Hier ist die Methode, es gibt wahrscheinlich einen besseren Weg, aber ich habe das gerade ausgepeitscht:
quelle
Ich bin gerade auf diesen Beitrag gestoßen, weil ich ein ähnliches Problem hatte, bei dem ich die Zeit für ein Entity Framework-Objekt in MVC festlegen wollte, das das Datum aus einer Ansicht (Datumsauswahl) abruft, sodass die Zeitkomponente 00:00:00 ist, aber ich brauche es soll die aktuelle Zeit sein. Basierend auf den Antworten in diesem Beitrag habe ich Folgendes gefunden:
quelle
quelle
Sie können einem neuen
DateTime
Wert auf viele verschiedene Arten einen Anfangswert zuweisen :Erweiterungsmethode
DateTime
dann mit
ChangeTime
:mit den Add-Methoden
mit der Zeitspanne
mit Anfangswert
quelle
Was ist falsch an der DateTime.AddSeconds-Methode, mit der Sie Sekunden hinzufügen oder entfernen können?
quelle
Sie können dem Parameter + ve / -ve Werte hinzufügen.
quelle
Behebt das nicht deine Probleme?
quelle
Ich bevorzuge das:
quelle
Verwenden Sie wie folgt:
Console.WriteLine (DateTime.Now.ClearTimeFrom (eTimeFragment.hours))
Dies muss zurückkehren: 2016-06-06 00: 00: 00.000
quelle
Die beste Lösung ist:
quelle
Probier diese
quelle
Hier ist ein Ghetto Weg, aber es funktioniert :)
quelle
dt.AddSeconds(0-dt.Seconds).AddSeconds(newSecondsValue)
würde es aber nicht empfehlen.