web-dev-qa-db-ja.com

c#TimeSpan分を時間に変換

分を時間に変換しています。だから私がminutes = 12534。結果は208:54。以下のコードはこの結果をもたらすことができません。

TimeSpan spWorkMin = TimeSpan.FromMinutes(12534);
string workHours = spWorkMin.ToString(@"hh\:mm");
Console.WriteLine(workHours);

結果は16:54

それを正しくする方法は?

8
Anup

正しい使用方法は、ToStringDateTimeオーバーロードを使用しないことです–そこにTotalHoursを表示する可能性がないため–しかし、string.Format 方法:

string.Format("{0:00}:{1:00}", (int)spWorkMin.TotalHours, spWorkMin.Minutes);
9
var totalMinutes = 12534;
Console.WriteLine("{0:00}:{1:00}", totalMinutes / 60, totalMinutes % 60);

または

var totalMinutes = 12534;
var time = TimeSpan.FromMinutes(totalMinutes);
Console.WriteLine("{0:00}:{1:00}", (int)time.TotalHours, time.Minutes);

これで遊ぶには https://dotnetfiddle.net/gYEsj2 を参照してください

8
Erno

形式指定子hhは、合計時間ではなく時間部分を表示します。 TotalHoursをintにキャストして文字列を手動で作成し、必要に応じて表示し、それに分を追加する必要があります。

1
Sami Kuhmonen

TimeSpan.TotalHoursプロパティを使用する必要があります

TotalHours プロパティは全時間と小数時間を表し、Hoursプロパティは全時間を表します。

    TimeSpan spWorkMin = TimeSpan.FromMinutes(12534);
    string workHours = spWorkMin.ToString(@"hh\:mm");
    Console.WriteLine(spWorkMin.TotalHours);

https://dotnetfiddle.net/JRCLra

MSDNドキュメントから:

「hh」カスタム形式指定子は、TimeSpan :: Hoursプロパティの値を出力します。これは、その日のコンポーネントの一部としてカウントされない、時間間隔内の全体の時間数を表します。

必要な結果を得る簡単な方法の1つは、次のようなものです。

TimeSpan spWorkMin = TimeSpan.FromMinutes(12534);
string workHours = string.Format("{0}:{1:00}", (int)spWorkMin.TotalHours, spWorkMin.Minutes);
Console.WriteLine(workHours);
0
gigaplex
TimeSpan spWorkMin = TimeSpan.FromMinutes(12534);
string workHours = string.Format("{0}:{1}", (int)spWorkMin.TotalHours, spWorkMin.Minutes);
Console.WriteLine(workHours);
0
h3rb4l