Panduan Lengkap Unix Timestamp: Konversi Detik/Milidetik/Mikrodetik & Praktik Terbaik Timezone
Unix timestamp merepresentasikan waktu sebagai jumlah waktu yang berlalu sejak Unix epoch (1 Januari 1970, 00:00:00 UTC). Hampir semua web server dan database menggunakan representasi ini secara internal. Artikel ini membahas perbedaan presisi, implementasi di beberapa bahasa pemrograman, penanganan timezone, dan jebakan daylight saving time.
Asal-Usul dan Definisi Unix Timestamp
Unix Epoch dimulai pada 1 Januari 1970, 00:00:00 UTC. Unix timestamp 0 sesuai dengan momen ini, sementara 1262304000 merepresentasikan 2010-01-01 00:00:00 UTC. Sistem ini mengabaikan efek leap second secara default.
Awalnya disimpan sebagai integer bertanda 32-bit, ini menciptakan Masalah Tahun 2038 — nilai maksimum akan overflow pada 19 Januari 2038, 03:14:07 UTC. Sistem modern menggunakan integer 64-bit, memperluas rentang waktu yang dapat direpresentasikan secara drastis.
Perbedaan Presisi Waktu
| Unit | Jumlah per Detik | Digit | Aplikasi Umum |
|---|---|---|---|
| Detik (s) | 1 | 10 | Sistem Unix/Linux tradisional |
| Milidetik (ms) | 1.000 | 13 | JavaScript, Java, logging |
| Mikrodetik (μs) | 1.000.000 | 16 | Distributed tracing, database |
| Nanodetik (ns) | 1.000.000.000 | 19 | Bahasa Go, analisis performa |
Aturan praktis: Timestamp 10 digit umumnya merepresentasikan detik, 13 digit merepresentasikan milidetik, 16 digit merepresentasikan mikrodetik, dan 19 digit merepresentasikan nanodetik.
Timestamp JavaScript
JavaScript menggunakan milidetik secara native. Constructor Date() mengasumsikan angka input adalah milidetik — untuk timestamp level detik, kalikan dengan 1000.
// Dapatkan Unix timestamp saat ini (dalam milidetik)
const timestampMs = Date.now();
console.log(timestampMs); // Contoh output: 1692268800123
// Untuk timestamp level detik, bagi milidetik dengan 1000 dan bulatkan ke bawah
const timestampSec = Math.floor(Date.now() / 1000);
console.log(timestampSec); // Contoh output: 1692268800
// Konversi Unix timestamp kembali ke objek Date
let ts = 1692268800;
let date = new Date(ts * 1000);
console.log(date.toISOString()); // "2023-08-17T16:00:00.000Z"
Timestamp Python
time.time() Python mengembalikan Unix timestamp level detik sebagai nilai floating-point:
import time
from datetime import datetime, timezone
# Dapatkan Unix timestamp saat ini (detik, float)
now_sec = time.time()
print(now_sec) # Contoh output: 1692268800.123456
# Dapatkan milidetik (integer)
now_millis = int(time.time() * 1000)
print(now_millis) # Contoh: 1692268800123
# Dapatkan nanodetik (Python 3.7+)
now_nanos = time.time_ns()
print(now_nanos) # Contoh: 1692268800123456789
# Konversi ke datetime
ts = 1692268800
dt_local = datetime.fromtimestamp(ts)
dt_utc = datetime.fromtimestamp(ts, timezone.utc)
print(dt_local.strftime("%Y-%m-%d %H:%M:%S")) # Waktu lokal
print(dt_utc.strftime("%Y-%m-%d %H:%M:%S")) # Waktu UTC
Timestamp Bahasa Go
Library time Go menyediakan berbagai level presisi:
package main
import (
"fmt"
"time"
)
func main() {
// Dapatkan Unix timestamp saat ini
sec := time.Now().Unix() // Detik
msec := time.Now().UnixMilli() // Milidetik (Go 1.17+)
nsec := time.Now().UnixNano() // Nanodetik
fmt.Println(sec) // Contoh: 1692268800
fmt.Println(msec) // Contoh: 1692268800123
fmt.Println(nsec) // Contoh: 1692268800123456789
// Konversi timestamp ke objek Time
t := time.Unix(sec, 0)
fmt.Println(t.UTC())
fmt.Println(t)
}
Kesalahan Umum dan Praktik Terbaik
Contoh Kesalahan: Unit yang Tidak Jelas
// ✗ Salah: unit timestamp tidak jelas
const timestamp = 1692268800;
const date = new Date(timestamp); // Error: diperlakukan sebagai milidetik, menampilkan 1970
// ✓ Benar: nyatakan unit dengan jelas
const timestampSec = 1692268800;
const timestampMs = 1692268800000;
const dateFromSec = new Date(timestampSec * 1000);
Praktik Terbaik Penamaan Field
log_entry = {
"timestamp_ms": 1692268800123, # Level milidetik
"timestamp_iso": "2023-08-17T16:00:00Z", # ISO 8601 UTC
"event_type": "user_login",
"user_id": 12345
}
Jebakan Penanganan Timezone
Ada empat jebakan utama saat bekerja dengan timezone:
- Mencampurkan waktu lokal dan UTC — Unix timestamp selalu berbasis UTC; konversi ke lokal hanya saat menampilkan
- Tidak menyimpan informasi timezone — Menciptakan ambiguitas; selalu simpan UTC atau sertakan offset
- Inkonsistensi timezone lintas sistem — Semua sistem harus menggunakan referensi timezone yang sama (direkomendasikan UTC)
- Menghitung offset DST secara manual — Andalkan library bawaan, jangan hardcode
Pendekatan yang direkomendasikan: “Penyimpanan terstandarisasi, tampilan terlokalkan.” Gunakan UTC atau Unix timestamp dalam fase penyimpanan dan transmisi untuk memastikan konsistensi; format sesuai timezone pengguna saat menampilkan.
Masalah Daylight Saving Time (DST)
DST menciptakan dua periode bermasalah:
- Waktu yang dilompati: Ketika DST dimulai, jam melompat maju. Misalnya, 02:00 langsung melompat ke 03:00, membuat 02:30 tidak ada.
- Waktu yang berulang: Ketika DST berakhir, 01:00–01:59 muncul dua kali, menciptakan ambiguitas.
Unix timestamp sendiri tetap kontinu dan tidak terpengaruh oleh DST, tapi konversi waktu lokal memerlukan penanganan yang hati-hati.
Praktik Terbaik untuk Logging, Database, dan API
Sistem Logging
Seragamkan timezone UTC + format ISO 8601; sertakan timestamp milidetik atau presisi mikrodetik jika diperlukan.
Database
Utamakan tipe kalender native dengan timezone; gunakan BIGINT untuk timestamp numerik dengan indikasi unit yang jelas dalam nama field (misalnya, *_epoch_ms).
API
Tentukan format dan unit dengan jelas. Antarmuka eksternal harus menggunakan ISO 8601 (mudah dibaca, menyertakan timezone); sistem internal dapat menggunakan timestamp numerik dengan unit yang didokumentasikan.
Skenario Kesalahan Umum
- Kegagalan parsing 13 digit: Timestamp milidetik yang diberikan ke fungsi yang mengharapkan detik menyebabkan overflow. Tentukan unit dari jumlah digit terlebih dahulu.
- Ketidakcocokan format: Tanggal tidak valid, timezone yang hilang, atau titik pergantian DST menyebabkan error parsing.
- Offset timezone: Penyimpangan jam utuh (±8 jam) biasanya menunjukkan masalah unifikasi. Rekomendasikan penggunaan UTC secara internal.
- Overflow numerik: Sistem 32-bit menghadapi batas 2038; prioritaskan integer 64-bit.
Pertanyaan yang Sering Diajukan
Mengapa 1 Januari 1970?
Pengembangan sistem operasi Unix dimulai pada tahun 1970, dan itu adalah tahun dekade yang bulat — mudah diingat dan dihitung. Integer 32-bit dapat merepresentasikan tanggal dari 1970 hingga 2038, yang cukup pada saat itu.
Bagaimana membedakan detik vs milidetik?
Tiga metode: periksa jumlah digit (10 digit = detik, 13 = milidetik, 16 = mikrodetik, 19 = nanodetik), verifikasi dengan menghitung dan mengecek kewajaran, atau gunakan tool konversi online.
Apakah masalah 2038 masih relevan?
Sistem modern yang menggunakan integer 64-bit telah sebagian besar menyelesaikan ini. Bahasa pemrograman utama sudah mendukung timestamp 64-bit. Sistem legacy 32-bit dan perangkat embedded mungkin masih perlu diperhatikan.
Mengapa DST menyebabkan masalah?
Diskontinuitas waktu dari jam yang dilompati dan pengulangan waktu dari jam yang berulang menciptakan ambiguitas parsing. Sistem yang berbeda menangani waktu ambigu dengan strategi yang berbeda. Solusinya: gunakan UTC secara internal, konversi ke waktu lokal hanya saat menampilkan.
Mengapa timestamp JavaScript dan Python berbeda?
Date.now() JavaScript mengembalikan milidetik (13 digit); time.time() Python mengembalikan detik (floating-point dengan presisi mikrodetik). Konversi memerlukan pembagian/perkalian dengan 1000.
Coba Sendiri
Konversi Unix timestamp secara instan dengan Unix Timestamp Converter kami — mendeteksi otomatis detik, milidetik, dan mikrodetik. 100% di browser Anda.
Bekerja dengan PostgreSQL? Baca Apa Sebenarnya yang Tersimpan di Kolom timestamp PostgreSQL? untuk jebakan timezone khusus Postgres.
Ringkasan
Dua aturan yang menyelesaikan sebagian besar masalah timestamp: simpan dalam UTC, tampilkan dalam waktu lokal. Dan selalu eksplisit tentang unit — beri nama field timestamp_ms atau created_at_epoch_s, bukan hanya timestamp.
Timestamp hanyalah satu bagian dari toolkit developer. Jelajahi lebih banyak tool penting untuk developer untuk encoding, hashing, dan konversi data.