Tidak semua kebutuhan waktu membutuhkan momen lengkap. Jadwal kerja bergantian hanya peduli jam, sedangkan tanggal ulang tahun hanya peduli tanggal. Menyimpan keduanya sebagai DateTime memaksa kita mengangkut komponen palsu: ulang tahun tersimpan sebagai 17 Agustus 00:00, dan jam kerja tersimpan sebagai tanggal yang tidak bermakna. Sejak .NET 6, struct DateOnly dan TimeOnly menyelesaikan masalah ini dengan tipe yang murni.

Kapan Memakai yang Mana #

KebutuhanTipeContoh nilai
Tanggal kalender murniDateOnly17 Agustus 2025
Jam dalam satu hariTimeOnly10:30:00
Momen lengkap dengan offsetDateTimeOffset2025-08-17 10:30 +07:00

Contoh Penggunaan #

csharp
DateOnly tanggal = new DateOnly(2025, 8, 17);
TimeOnly jam = new TimeOnly(10, 30, 0);

Console.WriteLine(tanggal.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture));
Console.WriteLine(jam.ToString("HH:mm:ss", CultureInfo.InvariantCulture));
Console.WriteLine(tanggal.DayOfWeek);
Console.WriteLine(jam.AddMinutes(45).ToString("HH:mm:ss", CultureInfo.InvariantCulture));

Output yang Dihasilkan:

text
2025-08-17
10:30:00
Sunday
11:15:00

Mari kita bedah baris demi baris:

  1. Baris 1-2: masing-masing struct dibuat dengan komponen yang relevan saja; tidak ada jam 00:00 palsu dan tidak ada tanggal pengisi.
  2. Baris 4-5 (ToString ...): format yyyy-MM-dd dan HH:mm:ss dicetak dengan CultureInfo.InvariantCulture agar pola tetap konsisten antar mesin.
  3. Baris 6 (DayOfWeek): 17 Agustus 2025 jatuh pada hari Sunday; properti kalender seperti ini tersedia tanpa konversi apa pun.
  4. Baris 7 (AddMinutes(45)): aritmetika TimeOnly berputar di dalam satu hari; 10:30 ditambah 45 menit menjadi 11:15, dan melewati tengah malam akan kembali ke 00:00.