Apa cara yang disarankan untuk memformat TimeSpan
objek menjadi string dengan format khusus?
Harap perhatikan: jawaban ini untuk .Net 4.0 dan di atasnya. Jika Anda ingin memformat TimeSpan di .Net 3.5 atau di bawah, lihat jawaban JohannesH .
String format TimeSpan khusus diperkenalkan di .Net 4.0. Anda dapat menemukan referensi lengkap dari penentu format yang tersedia di halaman MSDN Custom TimeSpan Format Strings .
Berikut ini contoh string format rentang waktu:
string.Format("{0:hh\\:mm\\:ss}", myTimeSpan); //example output 15:36:15
( UPDATE ) dan ini adalah contoh menggunakan interpolasi string C # 6:
$"{myTimeSpan:hh\\:mm\\:ss}"; //example output 15:36:15
Anda harus keluar dari karakter ":" dengan tanda "\" (yang harus diloloskan kecuali jika Anda menggunakan string kata demi kata).
Kutipan dari halaman MSDN Custom TimeSpan Format Strings ini menjelaskan tentang cara keluar dari ":" dan "." karakter dalam string format:
Penentu format format TimeSpan kustom tidak menyertakan simbol pemisah placeholder, seperti simbol yang memisahkan hari dari jam, jam dari menit, atau detik dari detik pecahan. Sebaliknya, simbol-simbol ini harus dimasukkan dalam string format kustom sebagai string literal. Misalnya, "dd.hh: mm" mendefinisikan titik (.) Sebagai pemisah antara hari dan jam, dan titik dua (:) sebagai pemisah antara jam dan menit.
myTimeSpan = new TimeSpan(15, 35, 54);
pernyataanmyTimeSpan .ToString("hh\\mm\\ss");
akan menghasilkan15m35s54
. Saya tidak berpikir itu yang Anda maksudkan karena itu akan menempatkan m setelah jam Anda dan setelah menit Anda.$"{myTimeSpan.TotalHours}:{myTimeSpan:mm\\:ss}"
. Dari sudut pandang pengguna, mungkin lebih baik untuk menampilkan hari-hari, tidak ada yang ingin secara mental mencari tahu berapa hari dalam 200+ jam.Untuk .NET 3.5 dan yang lebih rendah, Anda dapat menggunakan:
Kode diambil dari jawaban Jon Skeet pada byte
Untuk .NET 4.0 dan di atasnya, lihat jawaban DoctaJonez .
sumber
Salah satu caranya adalah membuat
DateTime
objek dan menggunakannya untuk memformat:Ini yang saya tahu. Saya harap seseorang dapat menyarankan cara yang lebih baik.
sumber
Sederhana. Gunakan
TimeSpan.ToString
dengan c, g atau G. Informasi lebih lanjut di MSDNsumber
Saya akan pergi dengan
sumber
Ini berfungsi untuk Framework 4
http://msdn.microsoft.com/en-us/library/ee372287.aspx
sumber
Secara pribadi, saya suka pendekatan ini:
Anda dapat menjadikan ini sebagai kustom sesuai keinginan tanpa masalah:
sumber
Ini luar biasa:
sumber
Anda juga dapat pergi dengan:
EDIT:
Anda juga dapat melihat Strings.Format .
sumber
Semua karakter literal harus diloloskan.
sumber
Saya menggunakan kode di bawah ini. Itu panjang, tetapi tetap merupakan satu ekspresi, dan menghasilkan output yang sangat ramah, karena tidak menghasilkan hari, jam, menit, atau detik jika mereka memiliki nilai nol.
Dalam sampel itu menghasilkan output: "4 hari 1 jam 3 detik".
sumber
String timeComponent(int value, String name) { return value > 0 ? value + " " + name + (value > 1 ? "s" : ""); }
Sebut itu untuk setiap komponen (misalnyatimeComponent(sp.Days, "day")
), lalu gunakanString.join
untuk memasukkan spasi.Saya menggunakan metode ini. Saya orang Belgia dan berbicara bahasa Belanda sehingga jam dan menit tidak hanya menambahkan 's' sampai akhir tetapi hampir kata yang berbeda dari tunggal.
Mungkin kelihatannya lama tapi sangat mudah dibaca menurut saya:
sumber
Ini adalah pendekatan yang saya gunakan diri saya dengan pemformatan bersyarat. dan saya mempostingnya di sini karena saya pikir ini cara yang bersih.
contoh output:
Pemformatannya mudah.
time.Days:#0:;;\\
format sebelumnya;;
adalah ketika nilai positif. nilai-nilai negatif diabaikan. dan untuk nilai nol yang kita miliki;;\\
untuk menyembunyikannya dalam string yang diformat. perhatikan bahwa backslash yang lolos diperlukan jika tidak akan memformat dengan benar.sumber
Inilah metode ekstensi saya :
Contoh panggilan:
Keluaran:
sumber
Ini adalah rasa sakit di VS 2010, inilah solusi saya.
sumber
The
Substring
Metode bekerja sempurna bila Anda hanya ingin Jam: Menit: Detik. Sederhana, kode bersih dan mudah dimengerti.sumber
Ini versi saya. Ini hanya menunjukkan sebanyak yang diperlukan, menangani pluralisasi, negatif, dan saya mencoba membuatnya ringan.
Contoh Keluaran
Kode
sumber
Jika Anda menginginkan format durasi yang mirip dengan youtube, berikan jumlah detik
Keluaran:
sumber
Saya ingin mengembalikan string seperti "1 hari 2 jam 3 menit" dan juga memperhitungkan jika misalnya hari atau minut adalah 0 dan kemudian tidak menunjukkannya. terima kasih kepada John Rasch untuk jawaban yang milikku hampir tidak ada dari
sumber