2009-06-19 16 views
25

Bir kılavuz çıktısında, TimeSpan değerini hesaplayıp TotalHours numaralı telefonu aldım. Örneğin.Negatif süre açıklığı

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

gol TotalHours39:44 olarak göstermek için, bu yüzden 7.5 den 07:30 değer dönüştürmek gerekiyor. Bu sorun değil ... negatif olmadıkça!

Ben negatif çıkarsa, .ToString("HH:mm") yöntemi kullanmak için bir DateTime dönüştürmek olamaz ve TimeSpan nesne biçim dizesi desteklemiyor

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

ile Hours bir TimeSpan nesnesi oluşturabilir.

+0

hangi dil bitirmek için i doğru cevap alamadım where.But her için kontrol? C#? –

+0

Lütfen kod parçacıklarını satır içi kod veya kod bölümleri olarak yeniden biçimlendirmeyi ve uygun platform etiketini eklemeyi düşünün (Snippet'lerinizden .NET'i tahmin ediyorum). – OregonGhost

cevap

7

Sadece -1 ile çarpın veya bir mutlak değer işlevi kullanın.

+41

Bunu yapan herkes için: 'TimeSpan.Duration' yöntemini kullanın. MSDN'den: "Değeri geçerli TimeSpan nesnesinin mutlak değeri olan yeni bir TimeSpan nesnesini döndürür". – prostynick

2

basit bir çözüm yapmak olacaktır: zaman aralığı 24 saatten daha uzun ise, bu da düzgün çalışacağını

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" 

.

62

bir TimeSpan.Duration yöntemi yok mu? Bunun yapmaya çalıştığınız şeyi halledeceğini düşünüyorum.

+0

Bu en kolay yoldur, sadece iki DateTime'ınızı çıkartın, sonuçta Duration() öğesini çağırın ve sonra TotalHours'u yapın. – Dan

1

Merhaba i i yazmaktayım kod biraz içine bu çalıştı bir int değişkeni

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

0

onun bu

.try çalışıyor o

(sonuçları) yardımcı olur umarım mytimespam.Negate();

+3

zaman * spam *, hehe;) –

0

Ben bu şekilde kullanıldığı yüzden

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