分を時間に変換しています。だから私がminutes = 12534
。結果は208:54
。以下のコードはこの結果をもたらすことができません。
TimeSpan spWorkMin = TimeSpan.FromMinutes(12534);
string workHours = spWorkMin.ToString(@"hh\:mm");
Console.WriteLine(workHours);
結果は16:54
。
それを正しくする方法は?
正しい使用方法は、ToString
のDateTime
オーバーロードを使用しないことです–そこにTotalHours
を表示する可能性がないため–しかし、string.Format
方法:
string.Format("{0:00}:{1:00}", (int)spWorkMin.TotalHours, spWorkMin.Minutes);
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 を参照してください
形式指定子hh
は、合計時間ではなく時間部分を表示します。 TotalHours
をintにキャストして文字列を手動で作成し、必要に応じて表示し、それに分を追加する必要があります。
TimeSpan.TotalHours
プロパティを使用する必要があります
TotalHours プロパティは全時間と小数時間を表し、Hours
プロパティは全時間を表します。
TimeSpan spWorkMin = TimeSpan.FromMinutes(12534);
string workHours = spWorkMin.ToString(@"hh\:mm");
Console.WriteLine(spWorkMin.TotalHours);
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);
TimeSpan spWorkMin = TimeSpan.FromMinutes(12534);
string workHours = string.Format("{0}:{1}", (int)spWorkMin.TotalHours, spWorkMin.Minutes);
Console.WriteLine(workHours);