4 menit bacaDiperbarui

Unix Timestamp: Detik Lompat, Masalah Tahun 2038, dan Jebakan Zona Waktu

Oleh Redaksi Safe Local Tools

Unix timestamp adalah bilangan bulat yang tampak sederhana tetapi menyembunyikan tiga kekacauan: kalender sipil, zona waktu politik, dan lebar kata perangkat keras. Perlakukan sebagai "instant UTC" untuk penalaran global—tetapi jangan lupa jam lokal banyak wilayah bergeser dua kali setahun untuk daylight saving.

Insinyur menyimpan detik sejak 1970-01-01T00:00:00Z karena perbandingan dan aritmatika durasi rapi—sampai lokalisasi, detik lompat, offset historis, atau overflow bertanda 32‑bit muncul.

Panduan ini membahas filosofi detik lompat versus timestamp POSIX sehari‑hari, menjelaskan overflow Tahun 2038, mengatalog jebakan zona waktu yang mengubah komponen kalender secara tak terduga, serta mengapa Safe Local Tools mengonversi timestamp secara lokal di browser ketika Anda men-debug log produksi tanpa menempel ID internal ke konverter SaaS gelap.

OG illustration

Unix time seperti yang dipakai mayoritas developer

Umumnya "Unix time" menghitung detik non‑lompat sejak epoch dalam UTC.

Pustaka memetakan timestamp ke komponen kalender menggunakan basis data zona IANA yang memelihara aturan daylight saving.

Detik lompat: astronomi versus timer perangkat lunak

Rotasi Bumi tidak mulus; UTC menyisipkan detik lompat sesekali agar tetap selaras dengan gagasan astronomis "hari".

Stack perangkat lunak berselisih historis tentang apakah timestamp harus "smear", mengulang, atau melompati.

Untuk log, timestamp biasanya cukup monoton setelah pipeline normalisasi; untuk pengukuran latensi, gunakan jam monoton seperti performance.now daripada konversi dinding.

Tahun 2038 dan overflow bertanda 32‑bit

Menyimpan detik sebagai bilangan bertanda 32‑bit klasik (time_t) melampaui sekitar 2038‑01‑19.

Mitigasi: persistensi dengan bilangan 64‑bit atau string ISO‑8601 dengan offset eksplisit untuk format arsip.

Audit firmware tersemat dan basis data lawas meskipun layanan Node Anda 64‑bit.

exp JWT adalah NumericDate detik sejak epoch—validator membandingkan dengan "sekarang" dari jam dinding yang bisa drift ketika kontainer bangkit dari snapshot.

Bias toleransi beberapa puluh detik ada persis karena sinkronisasi global tidak pernah sempurna.

Penyesuaian NTP versus insiden keamanan

Administrator kadang menjepret jam drastis setelah remediasi NTP yang dikompromikan—trace tersebar bisa menampilkan durasi negatif mustahil kecuali Anda beri metadata koreksi manual.

Zona waktu adalah kebijakan bukan fisika

Basis data IANA menyandikan transisi DST yang bisa berubah dengan pemberitahuan politik singkat.

Bug klasik: menyimpan komponen lokal tanpa offset selama celah musim semi ketika jam tidak ada.

Lebih baik simpan instant UTC dengan offset eksplisit ketika rekonstruksi niat manusia masa lalu penting secara forensik.

Lipatan DST menghasilkan jam lokal duplikat

Saat jam mundur, satu jam civil berulang—tanpa metadata offset Anda tidak bisa membedakan kejadian pertama versus kedua dalam audit.

Pipeline log harus mencatat epoch UTC bersama string lokalisasi ketika kejelasan forensik dibutuhkan.

Campuran float versus integer untuk timestamp

Terkadang orang mencampur detik dan milidetik secara tidak sengaja dan mengalikan kesalahan di dashboard agregasi—normalisasi unit di perbatasan ingest dengan validasi skema.

Bahaya parsing string ambigu

Utamakan ISO‑8601 dengan sufiks zona untuk interchange.

Date.parse pada format bebas mengundang inkonsistensi historis antar mesin.

Jam monoton untuk backoff dibanding jam dinding untuk tampilan

Timer retry harus mengacu sumber monoton yang kebal lonjakan admin.

Ini berbeda dari menampilkan stempel waktu kepada manusia.

Basis data: TIMESTAMP versus TIMESTAMPTZ

TIMESTAMP WITHOUT TIME ZONE mengundang analis mengira mereka menyimpan "waktu lokal" sementara mesin membaca melalui zona sesi—bagus untuk demo, berbahaya untuk log audit lintas wilayah.

Kebiasaan emas: persist instant sebagai UTC (timestamptz atau ISO) dan lokalkan hanya pada lapisan presentasi.

Aritmatika kalender bukan sekadar menjumlahkan detik

"Jam kerja sama minggu depan" mengikuti kalender tidak beraturan—bukan kelipatan tetap detik.

Langganan dan penagihan sering memerlukan makna kalender bulanan eksplisit; mencampur dengan penambahan durasi mentah menghasilkan tagihan ganda atau terlewat.

Safe Local Tools dan debugging sensitif

Responder insiden sering menerjemahkan epoch dari log ke momen manusiawi; mengunggah pengidentifikasi proprietari ke situs konverter memperluas permukaan pengungkapan yang tidak perlu.

Konversi Safe Local Tools dilakukan melalui pemrosesan browser‑lokal yang selaras dengan alur kerja debug sensitif—tetap silangkan dengan pemantauan otoritatif Anda.

Daftar migrasi singkat untuk skema lawas

Inventarisasi kolom epoch 32‑bit.

Standarkan sufiks eksplisit _ms versus _s pada kolom API.

Dual‑write ISO UTC untuk audit bersama epoch numerik untuk join analitik.

Kebiasaan praktis menghindari kejutan bertugas

Selama outage log kedua epoch milidetik dan string ISO UTC sampai dashboard menyatu.

Uji konversi di perbatasan DST untuk wilayah pelanggan utama.

Dokumentasikan unit sekali dalam kontrak API dan lint nama bidang yang ambigu seperti time.

Penyimpanan kolomar dan partisi

ClickHouse atau BigQuery sering menyimpan event_time sebagai epoch ms.

Pastikan definisi partisi mengikuti UTC midnight dengan konsisten—mencampur detik dan ms menyebabkan kesalahan diam‑diam 1000× pada rasio pertumbuhan.

Timestamp Unix menjinakkan pengurutan tersebar sampai politik kalender ikut campur—maka offset eksplisit, bilangan lebih lebar, dan parsing disiplin lebih penting dari pintasan pintar.

Saat Anda butuh konversi cepat sambil memeriksa trace dan klaim JWT secara berdampingan, Coba Konverter Unix Timestamp →