DateTimeOffset menandai titik waktu, sedangkan struct TimeSpan mengukur jarak waktu: durasi, sisa waktu, atau selisih dua titik. Nilainya berupa jumlah tick dan tidak terikat tanggal mana pun, sehingga 07:30:00 berarti tujuh jam tiga puluh menit, bukan pukul 07:30 pada hari tertentu. Pembagian peran ini menjaga kode tetap jelas: durasi memakai TimeSpan, momen memakai tipe tanggal-waktu.
Membuat dan Menghitung Durasi #
TimeSpan dapat dibuat lewat method statis seperti FromHours, lewat konstruktor, atau lewat pengurangan dua nilai tanggal-waktu:
TimeSpan durasi = TimeSpan.FromHours(7) + TimeSpan.FromMinutes(30);
Console.WriteLine(durasi);
Console.WriteLine(durasi.ToString(@"hh\:mm"));
Console.WriteLine(durasi.TotalMinutes);
TimeSpan mulai = new TimeSpan(9, 0, 0);
TimeSpan selesai = new TimeSpan(10, 45, 0);
Console.WriteLine(selesai - mulai);Output yang Dihasilkan:
07:30:00
07:30
450
01:45:00Mari kita bedah baris demi baris:
- Baris 1 (
FromHours(7) + FromMinutes(30)): dua durasi dijumlahkan lewat operator+; hasilnya tetapTimeSpan. - Baris 3 (
durasi): format defaultcmencetak07:30:00, bukan pukul tujuh malam. - Baris 4 (
ToString(@"hh\:mm")): pada polaTimeSpan, tanda titik dua harus di-escape dengan backslash (\:); tanpa escape, karakter:ditafsirkan sebagai pemisah format dan hasilnya berubah mengikuti culture. - Baris 5 (
TotalMinutes): propertiTotal*mengembalikan durasi utuh dalam satu satuan, di sini450menit sebagaidouble. - Baris 8-9 (
selesai - mulai): pengurangan dua titik jam menghasilkan durasi01:45:00; inilah pola standar menghitung lama proses.
TimeSpan juga muncul tanpa kita panggil secara eksplisit: DateTime.Subtract mengembalikan TimeSpan, dan banyak API menetapkan batas waktu dengan parameter bertipe ini, misalnya TimeSpan.FromSeconds(30) untuk timeout. Karena nilai negatif sah dan bermakna durasi mundur, bandingkan durasi dengan operator < atau > alih-alih menafsirkan tandanya sendiri.