Aplikasi yang melayani pengguna di banyak kota tidak boleh menganggap semua jam sama. TimeZoneInfo di namespace System menyimpan aturan resmi satu zona waktu: offsetnya, aturan daylight saving, dan sejarah perubahannya. Zona dicari lewat identifier; Linux, macOS, dan container umumnya memakai identifier IANA seperti Asia/Jakarta, sedangkan Windows memakai nama khusus seperti SE Asia Standard Time.
Mencari Zona dan Mengonversi #
TimeZoneInfo jakarta = TimeZoneInfo.FindSystemTimeZoneById("Asia/Jakarta");
DateTime utc = new DateTime(2025, 8, 17, 3, 30, 0, DateTimeKind.Utc);
DateTime wib = TimeZoneInfo.ConvertTimeFromUtc(utc, jakarta);
Console.WriteLine(wib.ToString("yyyy-MM-dd HH:mm", CultureInfo.InvariantCulture));
Console.WriteLine(jakarta.BaseUtcOffset);
Console.WriteLine(jakarta.IsDaylightSavingTime(utc));Output yang Dihasilkan:
2025-08-17 10:30
07:00:00
FalseMari kita bedah baris demi baris:
- Baris 1 (
FindSystemTimeZoneById): runtime membaca database zona (tzdata) dan mengembalikan objectTimeZoneInfountukAsia/Jakarta; identifier yang tidak dikenal melemparTimeZoneNotFoundException. - Baris 3 (
new DateTime ... DateTimeKind.Utc): titik acuan 03:30 UTC dibuat denganKindeksplisit agarConvertTimeFromUtctidak salah menafsir sumber waktunya. - Baris 4 (
ConvertTimeFromUtc): runtime menambahkan offset zona ke titik UTC dan menghasilkan10:30, jam dinding yang benar di Jakarta. - Baris 6 (
BaseUtcOffset): offset standar zona adalah07:00:00, konsisten dengan istilah WIB. - Baris 7 (
IsDaylightSavingTime): Indonesia tidak menerapkan daylight saving, sehingga hasilnyaFalsesepanjang tahun.
Object TimeZoneInfo bersifat immutable dan aman dipakai bersama, sehingga pemanggilan FindSystemTimeZoneById cukup dilakukan sekali dan hasilnya disimpan sebagai field static. Untuk zona dengan daylight saving, ConvertTimeFromUtc otomatis menerapkan aturan musiman sesuai tanggal yang dikonversi; kita tidak perlu menambah atau mengurangi jam secara manual, dan itulah alasan konversi manual dengan penjumlahan TimeSpan sebaiknya ditinggalkan.