C# Zeiten Vergleichen?

6 Antworten

Gutes Link von Spoiler, doch Hardcore.

Grundsätzlich: Jedes Datum wird gespeichert als eine "double" (je nach Programmiersprache verschieden bezeichnet) Zahl:

Vor dem Komma steht der Tag als Zahl und nach dem Komma die Zeit.

Also z.b. 45667,455

Der Tag wäre der 45667 (jeden Tag hochgezählt glaublich seit 1.1.1900) und 0,455 die Uhrzeit.

Diese Zahl muss man konvertieren, um das Datum zu sehen. Doch man kann mit ihr prima rechnen. 2 Tage vor 45667 sind 45665.

Achtung! Wenn Du 2 Tage vergleichst, einer hat die Zeit dabei und einer nicht, - dann wäre das Datum natürlich "ungleich".

Woher ich das weiß:Studium / Ausbildung – siehe auch Computer
ohwehohach  23.06.2020, 09:43

Völlig unnötig. Ist in C# ein Einzeiler und man muss nichts darüber wissen, ob und wie ein DateTime intern behandelt wird. Man nimmt einfach die Routinen, die in der DateTime-Klasse ohnehin vorhanden sind.

2
Mauritan  23.06.2020, 09:45
@ohwehohach

Natürlich nimmt man die. Doch den Hintergrund zu verstehen, hat noch niemanden geschadet. Gerade meine letzte Zeile zu "ungleich" ist Wissen, dass manches erhellt, das "vorher nicht ging".

0
ohwehohach  23.06.2020, 09:46
@Mauritan

Naja, dass ein DateTime einen Zeitstempel enthält, ist ja irgendwie auch klar ;-)

1
Mauritan  23.06.2020, 10:10
@ohwehohach

So klar ist das durchaus nicht. Die Feinheiten der Typen mit und ohne Zeit kannst Du auf StackOverflow nachlesen. Suche also bitte dort, sollte es Dich interessieren.

0
ohwehohach  23.06.2020, 11:08
@Mauritan

Doch, schon. Sonst würde der Datentyp Date heißen und nicht DateTime.

0

sorry ich war bei meiner ersten Antwort auf den nackten Vergleich aus...

Aber auch Dein Problem ist trivial.

die Timespan-Struktur hat für fast alle Gegebenheiten eine Lösung:

int DaysBetween(DateTime d1, DateTime d2) {
    TimeSpan span = d2.Subtract(d1);
    return (int)span.TotalDays;
}

Nun, das ist sogar sehr einfach:

if (theGivenDate.AddDays(7) <= DateTime.Now) { ... }

Wenn es Dir wirklich nur um den Tag und nicht auf die Sekunde genau ankommt, kannst Du auch sagen:

if (theGivenDate.Date.AddDays(7) <= DateTime.Now.Date)

Dann wird die Uhrzeit "Mitternacht" verwendet.

Du kannst zwei DateTimes mit den üblichen Operatoren vergleichen, ähnlich wie bei Zahlen.

Z.B. kannst Du den aktuellen Zeitpunkt minus den vergangenen Zeitpunkt berechnen und bekommst dann einen TimeSpan-Wert zurück und darüber kannst Du dann abfragen, wie viele Tage, Stunden, Minuten, etc. das sind.

Das funktioniert auch umgekehrt:
DateTime + TimeSpan = etwas späteres DateTime

Für das alles gibt's natürlich auch Methoden und noch speziellere Funktionen.
Schau dir am besten die Doku-Seiten zu DateTime und TimeSpan an.

Woher ich das weiß:Berufserfahrung – C#.NET Senior Softwareentwickler