Hampir semua aplikasi menyimpan momen waktu: tanggal transaksi, jadwal rapat, atau masa berlaku kupon. C# menyediakan struct DateTime di namespace System untuk kebutuhan tersebut. Nilai DateTime tersusun dari jumlah tick (satuan 100 nanodetik) sejak 1 Januari 0001, dan struct ini bersifat immutable: setiap operasi aritmetika mengembalikan nilai baru, bukan mengubah nilai lama.
Tiga Nilai Kind #
Setiap DateTime membawa penanda Kind yang menjelaskan sudut pandang waktunya:
| Kind | Makna |
|---|---|
Unspecified | Waktu tanpa keterangan zona |
Utc | Waktu koordinat universal |
Local | Waktu sesuai zona mesin yang menjalankan program |
Membuat dan Membaca DateTime #
DateTime kemerdekaan = new DateTime(2025, 8, 17);
DateTime rapat = new DateTime(2025, 8, 17, 10, 30, 0);
Console.WriteLine(kemerdekaan.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture));
Console.WriteLine(rapat.ToString("yyyy-MM-dd HH:mm", CultureInfo.InvariantCulture));
Console.WriteLine(rapat.Year);
Console.WriteLine(rapat.Kind);Output yang Dihasilkan:
2025-08-17
2025-08-17 10:30
2025
UnspecifiedMari kita bedah baris demi baris:
- Baris 1 (
new DateTime(2025, 8, 17)): konstruktor mengisi jam 00:00:00 secara otomatis karena argumen jam tidak diberikan; cocok untuk tanggal kalender murni. - Baris 2 (
new DateTime(2025, 8, 17, 10, 30, 0)): versi konstruktor lengkap menentukan jam, menit, dan detik. - Baris 4-5 (
ToString ...): pola format kustomyyyy-MM-dddanyyyy-MM-dd HH:mmdicetak denganCultureInfo.InvariantCultureagar keluaran tidak berubah antar mesin. - Baris 7 (
rapat.Kind): object yang dibuat lewat konstruktor berparameter angka berstatusUnspecified, sebab kita belum menyatakan zona waktunya.
Properti kalender lain dibaca dengan cara yang sama: Month, Day, Hour, DayOfWeek, dan DayOfYear mengembalikan komponen sesuai nilai yang tersimpan. Untuk aritmetika, method seperti AddDays dan AddMonths menghitung komponen kalender dengan benar, misalnya menambah satu bulan pada 31 Januari menghasilkan akhir Februari, bukan tanggal yang tidak sah.