Nur Stunde (Minute, Sekunde) von Timespan erhöhen/minimieren

StehtimSchilf

Erfahrenes Mitglied
Hi Forum

Ich möchte die Stunden eines TimeSpans erhöhen/minimeren:

Timespan : 00:05:03
+ 4h

Dann möchte ich 04:05:03.

Das klappt ja sehr gut mit add(), wenn der ursprüngliche Timespan > 0 ist. Ebenso klappt dies, wenn die Stunden bereits negativ sind und ich die Stunden minimieren möchte.

Wenn der Timespan jedoch > 0 ist (00:05:03) und ich davon 4h abziehe, dann möchte ich eben -04:05:03 - doch add() / subtract() liefert mir dann: -03:54:57, was ja korrekt 4h Unterschied ist.

Also hab ich gesucht und getüftelt und kam zum Schluss, da brauchts eine eigene Funktion:

Code:
      public static TimeSpan AddHour(TimeSpan ts, int hoursToAdd) {
         int hours = ts.Hours + hoursToAdd;
         int minutes = ts.Minutes;
         int seconds = ts.Seconds;

         if (hours < 0) {
            minutes = -Math.Abs(minutes);
            seconds = -Math.Abs(seconds);
         } else {
            minutes = Math.Abs(minutes);
            seconds = Math.Abs(seconds);
         }

         TimeSpan result = new TimeSpan(hours, minutes, seconds);

         return result;
      }

Diese funktioniert auch einwandfrei! Doch muss ich das nun für Days, Minutes, Seconds, Milliseconds schreiben?

Es muss doch hierfür etwas viel einfachers geben! Ideen?

cheerioh
SiS
 
Hi napstermania

ich verwende den Wert in einem eigenen Updown-Steuerelement, damit der Benutzer eine Zeitverschiebung angeben kann Datum + hh:mm:ss. TimeSpan schien mir günstig, da es eben negative Zeitspannen gibt - was es bei DateTime nicht gibt (negatives Datum). Aber ich schau' mir mal Dein Vorschlag an. Ich kann ja einfach ein Referenzdatum wählen und dann von dort aus +/- machen. Aber für eine spätere Weiterentwicklung (Verschieben um Yahre, Monate, Tage) sah ich die Lösung schon eher im TimeStamp.

Danke % Gruess
SiS
 
Hallo,

dann Arbeite doch einfach stringbasiert. Im UpDown Element wird das Datum sowieso als string angezeigt. Den kannst du ganz einfach aufsplitten, bearbeiten und anschließend wieder als TimeStamp konvertieren.

Grüsse
 
Im Prinzip ist die Idee mit der TimeSpan-Klasse nicht schlecht, da es sich ja tatsächlich um eine Zeitspanne handelt, die der Benutzer eingeben soll.
Aber wie wäre es denn mit folgendem Vorschlag:
Du erstellst jeweils für Tage, Stunden, Minuten und Sekunde eine Integer-Variable. Den Benutzer lässt du über Controls (UpDownControl zum Beispiel) direkt diese 4 Variablen ändern. Für deine Berechnungen erstellst du dann aber aus diesen 4 Eingaben ein TimeSpan-Objekt (und verwendest diesen Konstruktor).
(Wenn du auch Jahre und Monate als Zeitverschiebung zulassen willst, dann ist mir nicht klar, was das bedeuten soll, da es ja Schaltjahre gibt und ein Monat 28,29,30 oder 31 Tage haben kann.
 

Neue Beiträge

Zurück