Seperti yang dikatakan orang lain, Anda dapat menggunakan DateTime
dan mengabaikan tanggal, atau menggunakan a TimeSpan
. Secara pribadi saya tidak tertarik pada salah satu dari solusi ini, karena tidak ada tipe yang benar-benar mencerminkan konsep yang Anda coba wakili - Saya menganggap tipe tanggal / waktu dalam. Waktu Noda . Dalam Waktu Noda, Anda dapat menggunakanLocalTime
tipe untuk mewakili waktu dalam sehari.
Satu hal yang perlu dipertimbangkan: waktu hari belum tentu lamanya waktu sejak tengah malam di hari yang sama ...
(Selain itu, jika Anda juga ingin mewakili waktu penutupan toko, Anda mungkin ingin mewakili 24:00, yaitu waktu di akhir hari. Sebagian besar tanggal / waktu API - termasuk Noda Waktu - jangan izinkan itu direpresentasikan sebagai nilai waktu hari.)
Duration
di Noda Time, atauTimeSpan
di BCL. Saya mungkin merangkum "tempat di video + komentar" sebagai tipe, dan kemudian memiliki array tipe itu.Anda dapat menggunakan rentang waktu
[Sunting]
Mempertimbangkan jawaban lain dan sunting pertanyaan, saya masih akan menggunakan TimeSpan. Tidak ada gunanya menciptakan struktur baru di mana yang sudah ada dari kerangka kerja sudah cukup.
Pada baris ini Anda akan menduplikasi banyak tipe data asli.
sumber
TimeSpan
seperti ini agak jelek. Itu yang terbaik yang tersedia dalam kerangka itu sendiri, tetapi itu tidak sama dengan mengatakan itu menyenangkan.Jika itu
Date
benar - benar mengganggu Anda, Anda juga dapat membuatTime
struktur yang lebih sederhana :Atau, mengapa harus repot: jika Anda tidak perlu melakukan perhitungan dengan informasi itu, simpan saja sebagai
String
.sumber
TimeSpan
, yang sudah menangani ini, dan dengan cara yang jauh lebih baik.Saya katakan menggunakan DateTime. Jika Anda tidak membutuhkan bagian tanggal, abaikan saja. Jika Anda perlu menampilkan waktu kepada pengguna, output diformat ke pengguna seperti ini:
Sepertinya semua pekerjaan ekstra untuk membuat kelas baru atau bahkan menggunakan TimeSpan tidak perlu.
sumber
DateTime.Now.ToString("hh:mm:ss.fff");
Microseconds:DateTime.Now.ToString("hh:mm:ss.ffffff");
Nanoseconds (jika DateTime bahkan memiliki resolusi sebanyak itu):DateTime.Now.ToString("hh:mm:ss.fffffffff");
Sesuai MSDNSaya pikir kelas Rubens adalah ide yang bagus jadi saya pikir untuk membuat sampel kelas Time yang tidak dapat diubah dengan validasi dasar.
sumber
Selain Chibueze Opata :
sumber
Inilah kelas TimeOfDay berfitur lengkap.
Ini berlebihan untuk kasus-kasus sederhana, tetapi jika Anda membutuhkan fungsionalitas yang lebih maju seperti yang saya lakukan, ini dapat membantu.
Ini dapat menangani kasus sudut, beberapa matematika dasar, perbandingan, interaksi dengan DateTime, penguraian, dll.
Di bawah ini adalah kode sumber untuk kelas TimeOfDay. Anda dapat melihat contoh penggunaan dan mempelajari lebih lanjut di sini :
Kelas ini menggunakan DateTime untuk sebagian besar perhitungan dan perbandingan internal sehingga kami dapat memanfaatkan semua pengetahuan yang sudah tertanam dalam DateTime.
sumber
Jika Anda tidak ingin menggunakan DateTime atau TimeSpan, dan hanya ingin menyimpan waktu hari, Anda bisa menyimpan detik sejak tengah malam di Int32, atau (jika Anda bahkan tidak ingin detik) menit sejak tengah malam akan masuk ke dalam Int16. Akan sepele untuk menulis beberapa metode yang diperlukan untuk mengakses Jam, Menit dan Kedua dari nilai tersebut.
Satu-satunya alasan saya dapat memikirkan untuk menghindari DateTime / TimeSpan adalah jika ukuran struktur sangat penting.
(Tentu saja, jika Anda menggunakan skema sederhana seperti di atas yang dibungkus dalam kelas, maka itu juga akan sepele untuk mengganti penyimpanan dengan TimeSpan di masa depan jika Anda tiba-tiba menyadari bahwa itu akan memberi Anda keuntungan)
sumber