2009-06-19 7 views
25

In meiner Ausgabe eines Rasters, berechne ich eine TimeSpan und nehmen Sie TotalHours. z.B.Handle negative Zeitspannen

(Eval("WorkedHours") - Eval("BadgedHours")).TotalHours 

Das Ziel ist es, die TotalHours als 39:44, um zu zeigen, so muss ich den Wert 7.5-07:30 konvertieren. Das ist kein Problem ... es sei denn, es ist negativ!

kann ich ein TimeSpan Objekt aus Hours mit

TimeSpan.FromHours((Eval("WorkedHours") - Eval("BadgedHours")).TotalHours) 

erstellen Wenn es negativ ist, ich es zu einem DateTime nicht konvertieren kann die .ToString("HH:mm") Methode zu verwenden, und das TimeSpan Objekt den Formatstring nicht unterstützt.

+0

Welche Sprache zu beenden? C#? –

+0

Bitte denken Sie daran, die Code-Snippets als Inline-Code oder Code-Abschnitte neu zu formatieren und das entsprechende Plattform-Tag hinzuzufügen (ich würde .NET von Ihren Snippets erraten). – OregonGhost

Antwort

7

Einfach mit -1 multiplizieren oder eine Absolutwertfunktion verwenden.

+41

Für jeden, der es googelte: Verwenden Sie die 'TimeSpan.Duration' Methode. Von MSDN: "Gibt ein neues TimeSpan-Objekt zurück, dessen Wert der absolute Wert des aktuellen TimeSpan-Objekts ist". – prostynick

2

Die einfache Lösung wäre, zu tun:

string format = "HH:mm"; 
if(hours < 0) 
    format = "-" + format; 

hours = Math.Abs(hours) 
9
static string ToHMString(TimeSpan timespan) { 
    if (timespan.Ticks < 0) return "-" + ToHMString(timespan.Negate()); 

    return timespan.TotalHours.ToString("#0") + ":" + timespan.Minutes.ToString("00"); 
} 

Console.WriteLine(ToHMString(TimeSpan.FromHours(3)));  //Prints "3:00" 
Console.WriteLine(ToHMString(TimeSpan.FromHours(-27.75))); //Prints "-28:45" 

Diese auch korrekt funktionieren, wenn die Zeitspanne länger als 24 Stunden.

62

Gibt es keine TimeSpan.Duration Methode? Ich denke, das würde mit dem, was Sie versuchen, umgehen.

+0

Dies ist der einfachste Weg, subtrahieren Sie einfach Ihre beiden DateTimes, rufen Sie Duration() auf und erstellen Sie TotalHours. – Dan

1

Hallo ich arbeitete diese in ein Stück Code ich geschrieben habe, hoffe, es

(Ergebnisse) hilft, ist eine int-Variable

(TimeSpan.FromMinutes(result)) < TimeSpan.Zero ? "-" + TimeSpan.FromMinutes(result).ToString(@"hh\:mm") : "" + TimeSpan.FromMinutes(result).ToString(@"hh\:mm");

0

seine Arbeit .try dieses

mytimespam.Negate();

+3

zeit * spam *, hehe;) –

0

ich jeden geprüft where.But ich eine richtige Antwort erhalten didnt, warum ich diese Art und Weise verwendet

TimeSpan diff = actualout.Subtract(actualin); 
string a =(diff.ToString()).ToString(); 
if(a.Contains("-")) 
{   
diff = new TimeSpan(0,0,0,0); 
}