2009-06-19 11 views
25

私のグリッド出力では、TimeSpanを計算し、TotalHoursとします。例えば負の時間間隔を処理する

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

目標はTotalHours39:44ように表示することですので、私は7.5から07:30に値を変換する必要があります。これは問題ありません...否定的でない限り!

私はそれが負なら、私は.ToString("HH:mm")メソッドを使用するDateTimeに変換することができない、とTimeSpanオブジェクトはフォーマット文字列をサポートしていません

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

HoursからTimeSpanオブジェクトを作成することができます。

+0

何語を完了するためにこの方法を使用していること、正しい答えを得るdidntのwhere.But私はすべてにチェックされていますか? C#? –

+0

コードスニペットをインラインコードまたはコードセクションとして再フォーマットし、適切なプラットフォームタグを追加することを検討してください(私はスニペットから.NETを推測します)。 – OregonGhost

答えて

7

-1を掛けるか、絶対値関数を使用します。

+41

グーグル・グーグルの場合: 'TimeSpan.Duration'メソッドを使用してください。 MSDNから: "値が現在のTimeSpanオブジェクトの絶対値である新しいTimeSpanオブジェクトを返します"。 – prostynick

2

簡単な解決策を行うには、次のようになります。

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" 

タイムスパンが24時間以上である場合、これはまた、正常に動作します。

4

TimeSpanクラスにNegateメソッドがあります。 MSDNのドキュメントへ

リンク: TimeSpan.Negate Method()

62

はTimeSpan.Duration方法はありませんか?私はこれがあなたがしようとしていることに対処するだろうと思う。

+0

これは最も簡単な方法です.2つのDateTimesを減算し、結果に対してDuration()を呼び出し、TotalHoursを実行します。 – Dan

1

こんにちは私は私が書いているコードのビットにこれを働いていた、(結果)それは

を役に立てば幸いint型変数

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

0

その作業.tryこの

ですmytimespam.Negate();

+3

time * spam *、hehe;) –

0

私はなぜ私は

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