🕐
← Kembali ke Panduan

Konversi Zona Waktu Unix Timestamp: Panduan Praktis

· Tag: timezone, dst, utc, time-conversion, unix-timestamp, daylight-saving, epoch

Mengapa Zona Waktu Penting untuk Unix Timestamp

Unix timestamp sendiri bersifat agnostik terhadap zona waktu — angka 1785292800 berarti instan yang sama di mana pun. Kompleksitas muncul saat mengonversi instan tersebut ke waktu lokal yang dapat dibaca manusia untuk ditampilkan, pencatatan, atau analisis data.

Prinsip intinya: selalu simpan dalam UTC, konversi hanya untuk ditampilkan. Aturan ini menghilangkan seluruh kategori bug dan membuat data Anda portabel di seluruh zona waktu.

UTC vs Waktu Lokal: Memahami Perbedaannya

UTC (Coordinated Universal Time)

UTC adalah standar waktu utama. Ini tidak pernah berubah untuk daylight saving dan sama di mana pun di Bumi. Unix timestamp didefinisikan dalam UTC.

Waktu Lokal

Waktu lokal adalah UTC yang disesuaikan untuk wilayah geografis tertentu. Ini dapat berbeda dari UTC dengan offset tetap (misalnya, UTC+8 untuk Waktu Standar Tiongkok) atau offset variabel (misalnya, Waktu Timur beralih antara UTC-5 dan UTC-4 untuk DST).

Masalah Offset

Unix timestamp yang sama menghasilkan waktu lokal yang berbeda tergantung pada lokasi pengamat:

| Timestamp | UTC | New York (EST) | Tokyo (JST) | London (BST) | |-----------|-----|----------------|-------------|--------------| | 1785292800 | 2026-07-19 00:00 | 2026-07-18 20:00 | 2026-07-19 09:00 | 2026-07-19 01:00 | | 1785379200 | 2026-07-19 23:59 | 2026-07-19 19:59 | 2026-07-20 08:59 | 2026-07-20 00:59 |

Daylight Saving Time (DST)

Apa itu DST?

Daylight Saving Time adalah praktik memajukan jam selama bulan-bulan musim panas sehingga cahaya siang hari bertahan lebih lama. Jam "maju" (kehilangan satu jam) di musim semi dan "mundur" (mendapatkan satu jam) di musim gugur.

Dampak pada Konversi Timestamp

DST menciptakan offset variabel antara waktu lokal dan UTC. Ini berarti:

  1. Waktu lokal yang sama dapat berkorespondensi dengan dua timestamp yang berbeda (selama transisi "mundur", jam 1:00 AM terjadi dua kali)
  2. Beberapa waktu lokal tidak ada (selama transisi "maju", misalnya, 2:00 AM tidak pernah terjadi — jam langsung melompat ke 3:00 AM)

Contoh: Jam yang Ambigu

Di zona waktu Eastern Time Amerika Serikat, pada hari Minggu pertama bulan November pukul 2:00 AM, jam mundur ke 1:00 AM. Ini berarti:

from datetime import datetime, timezone
import pytz

eastern = pytz.timezone("America/New_York")

# Kemunculan pertama 1:00 AM (EDT, UTC-4)
first = eastern.localize(datetime(2026, 11, 1, 1, 0), is_dst=True)
print(first.timestamp())
# Suatu nilai timestamp

# Kemunculan kedua 1:00 AM (EST, UTC-5) = 3600 detik kemudian!
second = eastern.localize(datetime(2026, 11, 1, 1, 0), is_dst=False)
print(second.timestamp())
# first.timestamp() + 3600

Selalu tangani jam mundur yang ambigu dengan hati-hati di aplikasi Anda. Menggunakan flag is_dst/ambiguous di Python atau opsi setara di bahasa lain mencegah bug yang halus.

Mengonversi di Seluruh Zona Waktu

Menggunakan Alat Online Kami

Pendekatan paling sederhana untuk konversi satu kali adalah Unix Timestamp Converter kami, yang menampilkan hasil di beberapa zona waktu secara bersamaan.

Menggunakan Baris Perintah Linux

# Tampilkan timestamp di beberapa zona waktu
TZ="America/New_York" date -d @1785292800
TZ="Europe/London"    date -d @1785292800
TZ="Asia/Tokyo"       date -d @1785292800

# Dengan format ISO kustom
TZ="UTC" date -d @1785292800 +"%Y-%m-%d %H:%M:%S %Z"
# Output: 2026-07-19 00:00:00 UTC

TZ="Asia/Shanghai" date -d @1785292800 +"%Y-%m-%d %H:%M:%S %Z"
# Output: 2026-07-19 08:00:00 CST

Menggunakan Python

from datetime import datetime
from zoneinfo import ZoneInfo  # Python 3.9+

ts = 1785292800

# Konversi ke beberapa zona waktu
timezones = ["America/New_York", "Europe/London", "Asia/Tokyo", "Australia/Sydney"]

for tz_name in timezones:
    tz = ZoneInfo(tz_name)
    dt = datetime.fromtimestamp(ts, tz=tz)
    print(f"{tz_name}: {dt.strftime('%Y-%m-%d %H:%M:%S %Z')}")

Menggunakan JavaScript

const ts = 1785292800;
const date = new Date(ts * 1000);

const timezones = [
    "America/New_York",
    "Europe/London",
    "Asia/Tokyo",
    "Australia/Sydney"
];

for (const tz of timezones) {
    const str = date.toLocaleString("en-US", {
        timeZone: tz,
        timeZoneName: "short",
    });
    console.log(`${tz}: ${str}`);
}

Menggunakan Go

package main

import (
    "fmt"
    "time"
)

func main() {
    t := time.Unix(1785292800, 0)
    
    timezones := []string{
        "America/New_York",
        "Europe/London",
        "Asia/Tokyo",
        "Australia/Sydney",
    }
    
    for _, tz := range timezones {
        loc, _ := time.LoadLocation(tz)
        fmt.Printf("%s: %s\n", tz, t.In(loc).Format("2006-01-02 15:04:05"))
    }
}

Pola Konversi Zona Waktu yang Umum

Mengonversi Log Server ke Waktu Lokal

Log server umumnya mencatat timestamp dalam UTC. Saat menganalisisnya, konversikan ke zona waktu lokal Anda:

# Baca file log dan tampilkan timestamp dalam waktu Pasifik
while IFS= read -r line; do
    if [[ $line =~ ^([0-9]+) ]]; then
        ts="${BASH_REMATCH[1]}"
        TZ="America/Los_Angeles" date -d @"$ts" "+%Y-%m-%d %H:%M:%S"
        echo " $line"
    fi
done < server.log

Menjadwalkan Acara Lintas Zona Waktu

Saat membagikan waktu acara di seluruh zona waktu, selalu komunikasikan dalam UTC atau bagikan Unix timestamp secara langsung. Ini menghilangkan ambiguitas:

  • "Rapat pada 1785292800" tidak ambigu
  • "Rapat pada 9:00 AM EST" menjadi ambigu selama transisi DST
  • "Rapat pada 9:00 AM America/New_York" lebih baik tetapi masih memerlukan mengetahui status DST

Menyimpan Timestamp di Basis Data

-- Selalu simpan timestamp itu sendiri (tidak bergantung zona waktu)
INSERT INTO events (occurred_at, user_id) VALUES (1785292800, 42);

-- ATAU simpan dengan kolom timestamp UTC eksplisit
INSERT INTO events (occurred_at_utc, user_id) 
VALUES ('2026-07-19 00:00:00+00', 42);

Ringkasan Praktik Terbaik

  1. Simpan dalam UTC, konversi untuk ditampilkan — Jangan pernah menyimpan waktu lokal di basis data
  2. Gunakan nama zona waktu IANA (misalnya, America/New_York) alih-alih singkatan (EST, PST) — singkatan bersifat ambigu dan tidak memperhitungkan DST
  3. Tangani DST secara eksplisit — Gunakan pustaka yang sadar zona waktu; jangan pernah menambah/mengurangi jam secara manual
  4. Selalu sertakan info zona waktu — Saat menerima tanggal dari pengguna, kumpulkan zona waktunya, bukan hanya offsetnya
  5. Uji tanggal tepi — Uji logika konversi Anda pada tanggal transisi DST (baik musim semi maupun musim gugur) untuk menangkap bug lebih awal

Basis Data Zona Waktu

Data zona waktu sistem Anda berasal dari IANA Time Zone Database (juga disebut basis data Olson), yang diperbarui beberapa kali setahun saat pemerintah mengubah aturan DST. Jaga sistem Anda tetap diperbarui:

# Debian / Ubuntu
sudo apt update && sudo apt install tzdata

# macOS
# Diperbarui secara otomatis melalui pembaruan perangkat lunak

# Verifikasi versi basis data Anda
zdump -v /etc/localtime | head -1

Gunakan Unix Timestamp Converter kami untuk konversi yang sadar zona waktu dengan cepat di semua zona waktu utama.