Laden...

DateTime-TimeSpan

Erstellt von Royal_TS vor 15 Jahren Letzter Beitrag vor 15 Jahren 1.478 Views
R
Royal_TS Themenstarter:in
4 Beiträge seit 2008
vor 15 Jahren
DateTime-TimeSpan

Hallo Leute!
Ich habe in einer Klasse zwei Felder vom Typ "DateTime". Nun werden in einer Zuweisung zwei verschiedene Zeitpunkte voneinander subtrahiert. Die Variable, der der Wert zugewiesen wird, ist aber vom Typ "TimeSpan". Also so:


private DateTime start = DateTime.Now;
private DateTime ende;
...
TimeSpan frameDauer = ende - start;

Also ich fasse das so auf, dass ich platt gesagt "DateTime" "TimeSpan" zuweise. Das sind doch zwei unterschiedliche Datentypen. Wieso klappt das trotzdem?

Danke schon mal im Voraus

G
497 Beiträge seit 2006
vor 15 Jahren

wo weist du denn einem TimeSpan eine DateTime zu? Du führst eine Operation mit dem Operator "-" aus. Dessen Überladung mit zwei Parametern des Typs DateTime gibt als Ergebnis eine TimeSpan aus.

du kannst übrigens auch für eigene Datentypen Operatoren überladen:
http://msdn.microsoft.com/de-de/library/s53ehcz3(VS.80).aspx

1.549 Beiträge seit 2004
vor 15 Jahren

Wir Arbeiten eigendlich nicht wir nehmen nur das geld

130 Beiträge seit 2005
vor 15 Jahren

Ich denke, das was du willst sollte folgender Code auch erfüllen:

DateTime _dtStart = DateTime.Now;
// Irgendwas machen
DateTime.Now.Subtract(_dtStart);

Ist meiner Meinung nach auch ein bisschen sauberer.
Eventuell solltest du dir auch mal die Stopwatch Klasse anschauen. Ich habe bisher nur davon gehört, deswegen kann ich leider auch nicht viel dazu sagen.

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo Feuerfalke,

Ist meiner Meinung nach auch ein bisschen sauberer.

nö, ist es nicht.

Erstmal müsstest du sowas schreiben wie

TimeSpan ts = DateTime.Now.Subtract(_dtStart);

denn sonst verschwindet das Ergebnis deiner Operation im Nirwana.

Und wie man sieht, liefert das genauso einen TimeSpan wie bei der Verwendung des Minus-Operators. Das ist auch das einzig richtige. Die Differenz zwischen zwei Zeitpunkten ist nunmal eine Zeitspanne und kein Zeitpunkt.

Und zu guter Letzt ist es einfach lesbarer, wenn man den Minus-Operator statt der Subtract verwendet.

Eventuell solltest du dir auch mal die Stopwatch Klasse anschauen. Ich habe bisher nur davon gehört, deswegen kann ich leider auch nicht viel dazu sagen.

Meine Erfahrung ist, dass man bei der Verwendung der Stopwatch mehr Code schreiben muss und leichter Fehler macht, als wenn man DateTime.Now verwendet. Die Stopwatch-Klasse ist sicher gut gemeint, aber eine Stopwatch loht sich m.E. nur dann, wenn kompliziertere Sachen machen will, als einfach nur eine Zeitdauer zu messen, z.B. wenn man die Stopwatch mehrfach starten und anhalten will.

herbivore

130 Beiträge seit 2005
vor 15 Jahren

Dass er den Rückgabewert noch irgendwo reinklopfen muss ist völlig klar. Ob sauberer oder nicht ist dann wohl Geschmackssache 🙂