Laden...

Absolute Sekunden aus Timespan erhalten

Erstellt von BIT_0_1 vor 6 Jahren Letzter Beitrag vor 6 Jahren 1.580 Views
B
BIT_0_1 Themenstarter:in
65 Beiträge seit 2016
vor 6 Jahren
Absolute Sekunden aus Timespan erhalten

hallo zusammen,

ich muss die absolute Anzahl von Sekunden einer Zeitspanne erhalten.


 TimeSpan result = dtList[dtList.Count-1] - dtList[0];
            result = result.Duration();
            result =  result.TotalSeconds;

geht das zwar, aber da ich nur die Zeit ohne Datum bekomme, habe ich bei Zeiten wie z.B.
[21:42:06] - [01:10:07] das Problem, dass ich den Tagesüberlauf nicht mit bekomme und anstatt (ca) 3h eben 20h berechnet werden.

Wie kann ich das am besten lösen?

Danke für Hilfe / Ratschläge

16.835 Beiträge seit 2008
vor 6 Jahren

Musst Dir selbst basteln. Ohne Datumsangabe kann das TimeSpan nicht per default.

B
BIT_0_1 Themenstarter:in
65 Beiträge seit 2016
vor 6 Jahren

Mist, ok Danke 😃

J
641 Beiträge seit 2007
vor 6 Jahren

Timespan sollja auch nie einen Zeitpunkt, sondern immer nur eine Zeitspanne darstellen. Warum nutzt du nicht DateTime und ziehst die voneinander ab?

cSharp Projekte : https://github.com/jogibear9988

16.835 Beiträge seit 2008
vor 6 Jahren

Da kommt am Ende auch nur eine Zeitspanne raus; aber auch hier würde ein Date benötigt werden.
Oder man nimmt eben DateTime.Parse, was dann das aktuelle Datum nehmen würde, was ihm ebenfalls nicht hilft.

Ergo: basteln.

H
18 Beiträge seit 2010
vor 6 Jahren

Vielleicht hilft das?

public static class TimeSpanTools
{
	public static TimeSpan ExactDuration(TimeSpan from, TimeSpan to)
	{
		var diff = to.Subtract(from);
		if (diff.TotalMilliseconds < 0)
		{
			return new TimeSpan(1,0,0,0).Subtract(diff.Duration());
		}
		return diff;
	}
}
3.003 Beiträge seit 2006
vor 6 Jahren

Die Antwort ist in deiner Frage enthalten:


dass ich den Tagesüberlauf nicht mit bekomme und anstatt (ca) 3h eben 20h berechnet werden

Klar kriegst du den mit: wenn der Abstand größer als ein halber Tag ist, dann ist der Abstand mit "Tagesüberlauf" geringer und das gewünschte Ergebnis.

Zieh die beiden voneinander ab, wenn das Ergebnis > 12 ist, ziehst du noch einmal 24 ab.


var diff = (first.TimeOfDay - second.TimeOfDay).TotalHours;
var result = 3600 * (diff > 12 ? 24-diff : diff);

LaTino

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

B
BIT_0_1 Themenstarter:in
65 Beiträge seit 2016
vor 6 Jahren

Vielen Dank echt beiden !!

genau so funktionierts. 👍