web-dev-qa-db-ja.com

負の期間を処理する

グリッドの出力では、TimeSpanを計算し、そのTotalHoursを取得します。例えば.

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

目標はTotalHoursを_39:44_として表示することなので、値を_7.5_から_07:30_に変換する必要があります。これは問題ありません...それが否定的でない限り!

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

_TimeSpan.FromHours( (Eval("WorkedHours") - Eval("BadgedHours")).TotalHours)
_

負の場合、.ToString("HH:mm")メソッドを使用するためにDateTimeに変換できず、TimeSpanオブジェクトはフォーマット文字列をサポートしません。

32
fr0xx

TimeSpan.Durationメソッドはありませんか?これであなたがやろうとしていることを処理できると思います。

77
Jared
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時間より長い場合にも正しく機能します。

10
SLaks

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

8
Daniel A. White

TimeSpanクラスにはNegateメソッドがあります。

MSDNドキュメントへのリンク: TimeSpan.Negate Method()

5
Eugeniu Torica

動作します。これを試してください

mytimespam.Negate();

4
Deval Patel

簡単な解決策は次のとおりです。

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

hours = Math.Abs(hours)
3
jvenema

こんにちは私はこれを私が書いているコードのビットに作りました、それが役立つことを願っています

(結果)はint変数です

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

すべての場所を確認しましたが、なぜこの方法を使用して終了したのかという正しい答えが得られませんでした

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

if ((int)Diff.TotalDays < 0) { // your code }
0
Mohammed Hedach