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:

csharp
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:

text
07:30:00
07:30
450
01:45:00

Mari kita bedah baris demi baris:

  1. Baris 1 (FromHours(7) + FromMinutes(30)): dua durasi dijumlahkan lewat operator +; hasilnya tetap TimeSpan.
  2. Baris 3 (durasi): format default c mencetak 07:30:00, bukan pukul tujuh malam.
  3. Baris 4 (ToString(@"hh\:mm")): pada pola TimeSpan, tanda titik dua harus di-escape dengan backslash (\:); tanpa escape, karakter : ditafsirkan sebagai pemisah format dan hasilnya berubah mengikuti culture.
  4. Baris 5 (TotalMinutes): properti Total* mengembalikan durasi utuh dalam satu satuan, di sini 450 menit sebagai double.
  5. Baris 8-9 (selesai - mulai): pengurangan dua titik jam menghasilkan durasi 01: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.