Zeiten summieren (aus Datei)

turndevil

Mitglied
Hallo Leute.

Ich bins...mal wieder. =)

Habe folgendes Problem: Ich habe eine Textdatei in der pro Zeile eine Zeitspanne gespeichert ist. ("00:18:00" zB..ihr wisst schon wie ich es meine)
Ich will nun mit einer Methode zeilenweise einlesen und die Zeitspanne immer der selben Variable aufrechnen. (Summe aller Zeitspannen also...TADAAA =) )

Habe schon vieles durchprobiert aber ich habe immer das gefühl, dass ich was kleines übersehen habe. Funktioniert hats noch nie sag ich mal dazu.

Es sollte so ähnlich gemeint sein:

Code:
public void GetGesamt()
{
     DateTime gesamtOld;
     TimeSpan gesamt = new TimeSpan(0);
     StreamReader sr = new StreamReader(@"dat.txt");
     String line;
 			
     while((line = sr.ReadLine()) != null)
     {
          gesamtOld = Convert.ToDateTime(line);
          gesamt.Add(gesamtOld);
     }
 			
     tbGesamt.Text = gesamt.ToString();
     sr.Close();
 			
     }

Ich weiss, dass ich zu einer TimeSpan kein DateTime addieren kann, hab schon so viel Möglichkeiten ausprobiert aber immer hat wer gemeckert. Könnt ihr mir bei dem entscheidenden zwischenschritt ein wenig weiterhelfen?
Vielen Dank schon mal im Voraus für eure Mühen. Ihr habt es nicht leicht mit mir, ich weiss. =)

mfg
tom
 
Code:
public void GetGesamt()
{
	DateTime gesamtOld;
	TimeSpan ts = new TimeSpan(0,0,0);
	StreamReader sr = new StreamReader(@"dat.txt");
	String line;
 			
	while((line = sr.ReadLine()) != null)
	{
		gesamtOld = Convert.ToDateTime(line);
		TimeSpan ts2 = new TimeSpan(gesamtOld.Hour, gesamtOld.Minute, gesamtOld.Second);
		ts = ts.Add(ts2);
				
	}
			
	tbGesamt.Text = ts.ToString();
	sr.Close();
}

Ich konnte es hier leider nicht testen, aber so müsste es funktionieren.
 
Zuletzt bearbeitet:
aaaaaah sehr gut.
Hab jetz ne Stunde drüber nachgedacht und bin einfach nicht auf diesen Code gekommen. Ich kannte zwar den Konstruktor aber mir ist ums Verrecken nicht mehr eingefallen wie ich den im Endeffekt nutzen soll. Ich glaub ich erhöh mal meinen Kaffeekonsum...vielleicht hilft das. =)

Vielen Dank nochmal.

mfg
tom
 
Hallo nochmal.

Also gleich mal vorweg, die Methode klappt immernoch super.

Nur gibt es da ein kleines Problem mit negativen Zeitspannen (die beliebten Minusstunden sozusagen *gg*).

Wenn ich also die Summierungsmethode aufrufe, zählt er mir alle Zeiten perfekt zusammen. Allerdings ignoriert er negative Zeitspannen. Ne so stimmt das nicht. Er ignoriert nur das Minuszeichen. Den Rest parset er wunderbar. (Da komm ich schon mal ins grübeln.) Danach wandelt er immer alles schön in TimeSpan um und summiert die Zeiten dann. Klar, dass dann nr falsche Überstunden zusammenkommen.

Wie umgeh ich das aber? Muss ich das über DateTime oder TimeSpan regeln? oder muss ich gar einen boolean erstellen, der mir Negativität anzeigt? (Was ja an sich kein Problem wäre....unten käme dann noch if(negativ)->zieh ab usw....und fertig)

Hoffentlich schaut in den Thread noch jemand rein =)
Danke im Voraus.

mfg
tom
 
Ich bin mir nicht sicher, ob man das ganze etwas 'eleganter' machen kann, aber das hier ist das 1. was mir eingefallen ist und ausserdem ist es viel zu spät zum nachdenken. Funktionieren müsste es trotzdem :)

Code:
public void GetGesamt()
	{
		DateTime gesamtOld;
		TimeSpan ts = new TimeSpan(0,0,0);
		StreamReader sr = new StreamReader(@"dat.txt");
		String line;
		string[] str;
 			
		while((line = sr.ReadLine()) != null)
		{

			str = line.Split(new char[]{':'});
                        gesamtOld = Convert.ToDateTime(line);
			TimeSpan ts2 = new TimeSpan(gesamtOld.Hour,gesamtOld.Minute, gesamtOld.Second);
			if (Convert.ToInt32(str[0]) < 0)
			{
				ts = ts.Subtract(ts2);
			}
			else
			{
				ts = ts.Add(ts2);
			}
				
		}
			
		tbGesamt.Text = ts.ToString();
		sr.Close();
	}

Das ganze geht davon aus, dass in deiner Datei Minuszeiten wiefolgt aussehen:
-08:02:21
Es wird der Erste Teil bis zu dem : genommen und geprüft ob dieser kleiner als 0 ist. Wenn ja, dann wird subtrahiert, wenn nein, wird addiert.
 
Ich bin doch so ein VOLLHONK!

Gestern nach Abgabe dieses Posts (und natürlich als der PC schon aus war *DAMN*) is mir die Lösung gekommen. Ich hätte einfach nur mit TimeSpan.Parse die Zeilen einlesen sollen. NARF.
Echt sorry, dass du um viertel vor 4 noch was wegen mir machen musstest. *schlechtesGewissenhab*
Normalerweise wär jetz n Bier fällig. =)

mfg
tom

edit: Ich merke mir den Code von dir aber trotzdem, weil mir das doch recht elegant erscheint wenn ich mal grössere Sätze mit komplizierten Strukturen einlese oder so. Danke.
 

Neue Beiträge

Zurück