Hanya ingin tahu, apakah ada format string yang dapat saya gunakan untuk menghasilkan sesuatu seperti "5h 3m 30s"?
misalnya. (jelas salah)
myTimeSpan.ToString("hh mm ss")
Jawaban:
Mencoba:
myTimeSpan.ToString("h'h 'm'm 's's'")
(Perhatikan bahwa bahkan spasi perlu dikutip - itulah yang salah dengan upaya pertama saya.)
Saya berasumsi Anda menggunakan .NET 4, tentu saja - sebelum itu, TimeSpantidak mendukung string format khusus.
EDIT: Seperti disebutkan, ini tidak akan bekerja lebih dari 24 jam. Perhatikan juga bahwa alternatif juga tersedia melalui Waktu Noda :)
Waspadai ini saat menggunakan jawaban dari Jon Skeet, dengan kode seperti ini:
// 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();
Anda mendapatkan hasil seperti ini:
23h 24m 2s
3h 24m 2s
Format jam maksimal tayang 23 jam. Itu tidak akan menunjukkan 27 jam atau mengubah 12 hari menjadi jam, itu hanya akan memotongnya seolah-olah mereka tidak pernah ada.
Salah satu cara untuk memperbaikinya adalah dengan membuat ekstensi yang memeriksa panjang TimeSpan dan membuat pemformatan berdasarkan apakah rentang waktu lebih dari satu tahun, hari, dll. Atau Anda juga bisa selalu menunjukkan hari karena tidak pernah terputus:
string newFormat = span.ToString("d'd 'h'h 'm'm 's's'");
Perhatikan bahwa saya seorang pemula dalam pemrograman. Ini hanya datang dari pengamatan setelah saya cukup beruntung untuk memperhatikan ini setelah berasumsi itu akan muncul sepanjang waktu. Saya mengatakan ini karena saya tidak tahu apakah ada solusi yang lebih baik, seperti format jam lain yang dapat menampilkan jam tanpa akhir.
Namun saya pikir format ini melakukan fungsi yang dimaksudkan. Anda hanya harus menyadarinya. Demikian postingan ini. Jawaban Jon Skeet tidak pernah menunjukkan bahwa format ini hanya menampilkan properti jam dari format tipe tanggal di mana jam bisa maksimal 23.
TotalHoursdll di TimeSpan. Anda mungkin menginginkan iniMath.Floor(span.TotalHours) + span.ToString("'h 'm'm 's's'")
Jika Anda kurang beruntung karena tidak menggunakan .NET4:
string.Format("{0}h{1}m{2}s",
myTimeSpan.Hours,
myTimeSpan.Minutes,
myTimeSpan.Seconds);
TotalHoursini masih merupakan cara yang tepat bahkan di versi .net yang lebih baru.
TotalHours, karena itu adalah double, bukan intsejenisnya Hours, yaitu itu akan menunjukkan pecahan jam dan juga seluruh jam.
bagaimana dengan konsentrasi:
String oTime = myTimeSpan.ToString("h") + "h " +
myTimeSpan.ToString("m") + "m " +
myTimeSpan.ToString("s") + "s "
UPDATE 1:
Anda dapat menghindarinya dengan kutipan tunggal: h'h 'm'm 's's'
Hours, Minutes, Secondssifat IMO. Saya pribadi lebih suka menggunakan string format kustom, setelah mencari tahu kutipannya.
Kode kecil ini membantu, untuk mengurai dan membalikkan kembali:
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;
Menggunakan Xamarindan .NET Portable 4.5ini adalah satu-satunya format yang saya kerjakan setelah mencoba semua jawaban lain di sini:
timespan.ToString("hh':'mm':'ss");
Pada dasarnya saya memasukkan :tanda kutip tunggal untuk menghindarinya.
Kadang-kadang saya menemukan string format sedikit seperti regex, ketika saya kembali ke kode nanti, saya lupa nuansanya. Oleh karena itu, saya menggunakan yang berikut ini, yang cenderung tidak mengirim saya kembali dokumentasi:
string FormatTimeSpan(TimeSpan timeSpan) =>
$"{Math.Floor(timeSpan.TotalHours)}h {timeSpan.Minutes}m {timeSpan.Seconds}s";
Interpolasi string, yang diperkenalkan di C # 6, membuat ini jauh lebih jelas daripada yang seharusnya.