Chapter Locale dan Timezone
ditutup dengan janji yang belum dibayar: kita sudah bisa mengganti jam dinding, tetapi belum membahas cara membaca dan menggeser waktu itu sendiri. Perintah date menjawab bagian pertama — memformat tanggal, menerjemahkan timestamp log, menghitung jam target maintenance. Bagian kedua dijawab NTP, protokol yang membuat ribuan mesin sepakat soal detik yang sama. Chapter ini membedah keduanya.
date: Membaca dan Memformat Waktu #
date tanpa argumen mencetak waktu saat ini dalam format panjang yang berubah setiap detik. Karena itu contoh-contoh bab ini mengunci waktunya dengan option -d yang menerima string waktu bebas, lalu membentuknya lewat string format diawali +:
date -d "2026-01-15" +%F
date -d "2026-01-15 14:00" "+%F %T"
LC_ALL=C.UTF-8 date -d "2026-01-15" +%AOutput yang Dihasilkan:
2026-01-15
2026-01-15 14:00:00
ThursdayBedah ketiga barisnya:
- Baris 1:
%Fmencetak tanggal ISO; tanpa jam,datemenganggap pukul00:00. - Baris 2:
%Tmenambahkan jam-menit-detik; format dikutip ganda karena berisi spasi. - Baris 3:
%Amencetak nama hari yang bergantung locale — dikunciLC_ALL=C.UTF-8; diid_ID.UTF-8hasilnyaKamis.
Penentu format lain menutup kebutuhan sehari-hari — daftar lengkapnya tercatat di date(1) :
| Format | Arti | Contoh hasil |
|---|---|---|
%F | tanggal lengkap (%Y-%m-%d) | 2026-01-15 |
%T | waktu (%H:%M:%S) | 14:00:00 |
%A / %B | nama hari / bulan penuh | Thursday, January |
%Z / %s | zona / epoch | WIB, 1768460400 |
Jam Dinding, UTC, dan Detik Epoch #
Linux tidak menyimpan “pukul 14:00 WIB”. Kernel hanya menyimpan satu angka — detik sejak 1 Januari 1970 00:00:00 UTC (Unix epoch) — yang date terjemahkan menjadi jam dinding lewat /etc/localtime. Dua alat mengendalikannya: -u memaksa UTC, dan prefix TZ= menyetel zona per perintah:
date -u -d "2026-01-15 07:00" "+%F.%T.%Z"
TZ=Asia/Jakarta date -d "2026-01-15 14:00" +%F.%T.%ZOutput yang Dihasilkan:
2026-01-15.07:00:00.UTC
2026-01-15.14:00:00.WIB- Baris 1:
-umemaksa jam dinding UTC, sehingga07:00tampil bersambungUTC. - Baris 2: prefix
TZ=Asia/Jakartamembuatdatemembaca sekaligus menampilkan waktu zona Jakarta —14:00:00 WIB.
Kedua baris memakai momen setara. Konversi dengan angka epoch juga dua arah:
date -u -d @1700000000 "+%F %T %Z"
TZ=Asia/Jakarta date -d "2026-01-15 14:00" +%sOutput yang Dihasilkan:
2023-11-14 22:13:20 UTC
1768460400- Baris 1: tanda
@menandai epoch literal;@1700000000menjadi2023-11-14 22:13:20 UTC. - Baris 2:
%sbekerja sebaliknya — mencetak epoch dari jam dinding Jakarta; berguna membaca log yang menulis timestamp polos.
Menghitung Tenggat dengan Tanggal Relatif #
String tanggal pada -d juga menerima aritmetika: koreksi relatif boleh ditempel setelah tanggal kuncinya:
date -d "2026-01-15 14:00 90 minutes" "+%T"
date -d "2026-01-15 - 3 days" +%FOutput yang Dihasilkan:
15:30:00
2026-01-12- Baris 1 menambah 90 menit ke
14:00→15:30:00— cara cepat menghitung jam target dari estimasi durasi maintenance. - Baris 2 mengurangi tiga hari →
2026-01-12, praktis mencari rentang log lama atau tenggat mundur.
Tanpa tanggal kunci, misalnya date -d "yesterday", koreksi dihitung dari waktu sekarang — praktis di terminal, tetapi berubah setiap dijalankan; skrip sebaiknya mengikat tanggal tetap.
Menggeser Waktu Adalah Urusan Root #
Mengubah jam sistem adalah operasi istimewa: date -s "2026-01-15 14:00:00" dan padanannya timedatectl set-time "2026-01-15 14:00" hanya diterima root. Di luar jam sistem di kernel ada jam perangkat keras (RTC) di motherboard yang bertahan berkat baterai koin; setelah jam digeser, salin hasilnya ke RTC dengan sudo hwclock --systohc.
Drift dan NTP: Jam Siapa yang Dipercaya #
Jam komputer dibangkitkan kristal kuarsa yang bergetar sedikit tidak tepat; selisih itu menumpuk — beberapa detik per minggu, gejala yang disebut drift. Bagi mesin tunggal drift sepele, tetapi di banyak mesin akibatnya nyata: log tak bisa dikorelasikan antar server, dan Kerberos menolak selisih lima menit.
NTP (Network Time Protocol) mengatasinya dengan hirarki stratum: stratum 0 sumber referensi (jam atom, GPS), stratum 1 server yang tersambung langsung ke sana, dan setiap lapisan di bawahnya menaikkan angkanya satu. Debian memakai systemd-timesyncd sebagai klien bawaan — ringan, hanya mensinkronkan jam sendiri. Menyalakannya: sudo timedatectl set-ntp true (seluruh sub-perintahnya dijabarkan timedatectl(1)
); rincian sinkronisasi diperiksa dengan timedatectl timesync-status, berikut contoh tampilan setelah koneksi stabil:
Server: 2.debian.pool.ntp.org:123 (2.debian.pool.ntp.org)
Poll interval: 4min 8s (min: 32s; max: 34min 8s)
Leap: normal
Version: 4
Stratum: 2
Reference: 31F7B8
Precision: 1us (-20)
Root distance: 27.033ms (max: 5s)
Offset: -1.842ms
Root delay: 14.216ms
Jitter: 3.396msDua baris layak dibaca: Stratum: 2 berarti server yang kita ikuti satu tingkat di bawah stratum 1, dan Offset: -1.842ms mengukur koreksi terakhir jam lokal. Untuk kebutuhan khusus, dua implementasi lain tetap populer:
| Aspek | systemd-timesyncd | chrony | ntpd |
|---|---|---|---|
| Peran | klien NTP ringan | klien dan server, koreksi cepat | implementasi klasik klien dan server |
| Kuat di | desktop dan server biasa | laptop, VM, jaringan sering putus | server waktu untuk mesin lain |
| Instalasi | bawaan Debian | paket chrony | paket ntpsec |
Perilaku systemd-timesyncd dirinci wiki systemd-timesyncd
.
Waktu kini terbaca, terformat, dan terjaga akurat. Identitas mesin berikutnya yang perlu dikelola bukan angka detik, melainkan nama — bagaimana Linux menyebut dirinya di jaringan lewat hostname, topik Chapter Hostname Management .