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

bash
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" +%A

Output yang Dihasilkan:

text
2026-01-15
2026-01-15 14:00:00
Thursday

Bedah ketiga barisnya:

  1. Baris 1: %F mencetak tanggal ISO; tanpa jam, date menganggap pukul 00:00.
  2. Baris 2: %T menambahkan jam-menit-detik; format dikutip ganda karena berisi spasi.
  3. Baris 3: %A mencetak nama hari yang bergantung locale — dikunci LC_ALL=C.UTF-8; di id_ID.UTF-8 hasilnya Kamis.

Penentu format lain menutup kebutuhan sehari-hari — daftar lengkapnya tercatat di date(1) :

FormatArtiContoh hasil
%Ftanggal lengkap (%Y-%m-%d)2026-01-15
%Twaktu (%H:%M:%S)14:00:00
%A / %Bnama hari / bulan penuhThursday, January
%Z / %szona / epochWIB, 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:

bash
date -u -d "2026-01-15 07:00" "+%F.%T.%Z"
TZ=Asia/Jakarta date -d "2026-01-15 14:00" +%F.%T.%Z

Output yang Dihasilkan:

text
2026-01-15.07:00:00.UTC
2026-01-15.14:00:00.WIB
  1. Baris 1: -u memaksa jam dinding UTC, sehingga 07:00 tampil bersambung UTC.
  2. Baris 2: prefix TZ=Asia/Jakarta membuat date membaca sekaligus menampilkan waktu zona Jakarta — 14:00:00 WIB.

Kedua baris memakai momen setara. Konversi dengan angka epoch juga dua arah:

bash
date -u -d @1700000000 "+%F %T %Z"
TZ=Asia/Jakarta date -d "2026-01-15 14:00" +%s

Output yang Dihasilkan:

text
2023-11-14 22:13:20 UTC
1768460400
  1. Baris 1: tanda @ menandai epoch literal; @1700000000 menjadi 2023-11-14 22:13:20 UTC.
  2. Baris 2: %s bekerja 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:

bash
date -d "2026-01-15 14:00 90 minutes" "+%T"
date -d "2026-01-15 - 3 days" +%F

Output yang Dihasilkan:

text
15:30:00
2026-01-12
  1. Baris 1 menambah 90 menit ke 14:00 → 15:30:00 — cara cepat menghitung jam target dari estimasi durasi maintenance.
  2. 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:

text
       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.396ms

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

Aspeksystemd-timesyncdchronyntpd
Peranklien NTP ringanklien dan server, koreksi cepatimplementasi klasik klien dan server
Kuat didesktop dan server biasalaptop, VM, jaringan sering putusserver waktu untuk mesin lain
Instalasibawaan Debianpaket chronypaket 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 .