回答:
試してください:
myTimeSpan.ToString("h'h 'm'm 's's'")
(スペースであっても引用符で囲む必要があることに注意してください。それが私の最初の試みの問題でした。)
もちろん、.NET 4を使用していると思います。それ以前は、TimeSpanカスタム形式の文字列をサポートしていませんでした。
編集:前述のとおり、これは24時間を超えると機能しません。野田タイムからも利用できる選択肢があることにも注意してください:)
Jon Skeetからの回答を使用するときは、次のようなコードでこれに注意してください。
// 12 days, 23 hours, 24 minutes, 2 seconds.
TimeSpan span = new TimeSpan(12, 23, 24, 2);
// 27 hours, 24 minutes, 2 seconds
TimeSpan span2 = new TimeSpan(27,24,2);
string format = span.ToString("h'h 'm'm 's's'");
string format2 = span2.ToString("h'h 'm'm 's's'");
Console.WriteLine(format);
Console.WriteLine(format2);
Console.ReadLine();
次のような結果が得られます。
23h 24m 2s
3h 24m 2s
時間形式は、最大で23時間を表示できます。27時間を表示したり、12日を時間に変換したりすることはなく、単に存在しないかのように切り捨てます。
これを修正する1つの方法は、TimeSpanの長さをチェックし、タイムスパンが1年、1日などに基づいているかどうかに基づいてフォーマットを作成する拡張機能を作成することです。または、日が途切れることがないため、常に日を表示することもできます。
string newFormat = span.ToString("d'd 'h'h 'm'm 's's'");
私はプログラミングの初心者です。これは、すべての時間を表示するだろうと想定した後、私が幸運にもこれに気付くことができた後にのみ、観測からのものです。私がこれを言っているのは、無限の時間を表示できる別の時間形式など、より良い解決策があるかどうかがわからないためです。
しかし、私はこのフォーマットが本来の機能を果たしていると思います。あなたはそれを知っている必要があります。したがって、この投稿。Jon Skeetの回答は、この形式が、最大23時間の日付タイプ形式の時間プロパティのみを表示することであることを決して示していません。
TotalHoursがTimeSpanにetcがある理由です。おそらく、このたかったMath.Floor(span.TotalHours) + span.ToString("'h 'm'm 's's'")
残念ながら.NET4を使用していない場合:
string.Format("{0}h{1}m{2}s",
myTimeSpan.Hours,
myTimeSpan.Minutes,
myTimeSpan.Seconds);
TotalHoursは、新しいバージョンの.netでも実行できる方法です。
TotalHoursことがあるとして、doubleではないintようHoursで、それは時間の分画だけでなく、全体の時間が表示されます、すなわち。
この小さなコードは、解析と逆戻りに役立ちます。
var t = TimeSpan.FromMilliseconds(450780);
double d1 = t.TotalSeconds;
string t3 = t.ToString(@"hh\:mm\:ss\.f",null);
var tt = TimeSpan.ParseExact(t3, @"hh\:mm\:ss\.f",null);
double d2 = tt.TotalSeconds;
ここで他のすべての答えを試した後、私が機能した唯一の形式を使用Xamarinし.NET Portable 4.5ました:
timespan.ToString("hh':'mm':'ss");
本質的に私は:それらをエスケープするために一重引用符で囲んでいます。