Jika kamu pernah menatap angka seperti 1717200000 dan bertanya-tanya tanggal apa yang diwakilinya, kamu tidak sendirian. Mempelajari cara mengkonversi unix timestamp ke tanggal adalah keterampilan fundamental bagi developer yang bekerja dengan API, database, dan sistem backend. Unix timestamp adalah hitungan detik (atau milidetik) yang telah berlalu sejak 1 Januari 1970, pukul 00:00:00 UTC, titik referensi yang dikenal sebagai epoch Unix. Panduan ini akan membahas mekanisme konversi datetime, penanganan timezone, dan contoh kode praktis dalam JavaScript, Python, dan SQL, sehingga kamu bisa berhenti menebak dan mulai mengkonversi dengan percaya diri.
Poin Penting:
- Unix timestamp menghitung detik dari 1 Januari 1970 UTC (epoch 0), membuatnya netral timezone secara desain.
- Selalu konfirmasi apakah timestamp kamu dalam detik atau milidetik sebelum konversi, karena mencampurnya adalah sumber bug paling umum.
- Offset timezone harus diterapkan secara eksplisit setelah konversi ke UTC, bukan sebelumnya.
- JavaScript, Python, dan SQL masing-masing memiliki fungsi built-in untuk konversi unix ke tanggal, tapi masing-masing punya keunikan tersendiri yang perlu diperhatikan.
Daftar Isi
Apa Itu Unix Timestamp?
Unix timestamp merepresentasikan satu momen waktu yang tidak ambigu sebagai bilangan bulat. Jam mulai berdetak pada 1 Januari 1970, pukul 00:00:00 UTC, momen yang disebut "epoch 0." Setiap detik yang telah berlalu sejak saat itu menambahkan satu ke penghitung. Kesederhanaan itulah yang membuatnya menjadi format waktu universal untuk sistem komputasi.
Tidak ada bulan, tahun kabisat, atau penyesuaian daylight saving time yang terpanggang dalam angka itu sendiri. Timestamp selalu berbasis UTC, yang berarti angka yang sama merujuk pada momen waktu yang sama persis terlepas dari di mana server atau user berada. Ini adalah kekuatan terbesarnya sekaligus sumber kebingungan developer dalam penanganan format waktu.
Untuk melihat lebih dalam bagaimana epoch time menjadi fondasi komputasi modern, lihat artikel kami tentang Epoch Time: Fondasi Unix Timestamps.
Satu perbedaan penting: tidak semua Unix timestamp menghitung dalam detik. Beberapa sistem, terutama lingkungan JavaScript dan banyak REST API, menggunakan milidetik. Timestamp 1717200000 dalam detik; 1717200000000 adalah momen yang sama dalam milidetik. Mencampurkan keduanya adalah bug paling sering dalam konversi datetime. Sebelum menulis satu baris kode pun, konfirmasi satuan yang digunakan sumber kamu.
Tidak yakin satuan mana yang harus digunakan sistem kamu? Lihat Detik vs Milidetik vs Mikrodetik: Unix Timestamp Mana yang Harus Kamu Gunakan? untuk breakdown praktis.
Penanganan Timezone dan Bug Offset Umum
Konversi timezone unix adalah tempat sebagian besar developer tersandung. Timestamp itu sendiri selalu UTC. Timezone hanya penting ketika kamu menampilkan atau menginterpretasi timestamp tersebut untuk user atau log entry. Memahami perbedaan ini mencegah seluruh kategori bug.
Dasar-dasar UTC
RFC 3339 mendefinisikan format standar untuk merepresentasikan datetime UTC dalam teks (2024-06-01T00:00:00Z). Ketika kamu mengkonversi Unix timestamp ke string yang dapat dibaca manusia, kamu menerapkan offset timezone ke basis UTC. Offset positif seperti +07:00 (Waktu Indonesia Barat) menambahkan jam dan menit; offset negatif seperti -05:00 (US Eastern Standard Time) menguranginya.
Deteksi Timezone Otomatis
Sebagian besar bahasa dan browser modern dapat mendeteksi timezone lokal secara otomatis. Di JavaScript, Intl.DateTimeFormat().resolvedOptions().timeZone mengembalikan nama timezone IANA (misalnya, Asia/Jakarta). Di Python, modul zoneinfo (Python 3.9+) menangani zona IANA secara native. Mengandalkan deteksi otomatis tidak masalah untuk tujuan display, tapi jangan pernah mengandalkannya untuk menyimpan atau menghitung timestamp.
Bug Offset Umum
- Memperlakukan waktu lokal sebagai UTC: Jika server kamu diset ke
UTC+7dan kamu memanggildatetime.now()tanpa menentukan timezone, kamu mendapat waktu lokal yang terlihat seperti UTC tapi meleset tujuh jam. - Transisi Daylight Saving Time (DST): Offset tetap seperti
+01:00tidak memperhitungkan DST. Gunakan zona IANA bernama (Europe/Berlin) alih-alih offset tetap kapan pun memungkinkan. - Ketidakcocokan milidetik vs detik: Memberikan timestamp milidetik ke fungsi yang mengharapkan detik menghasilkan tanggal di tahun 55000+. Selalu periksa besaran angka terlebih dahulu.
- Pengaturan timezone database: MySQL dan PostgreSQL dapat menyimpan dan menampilkan timestamp secara berbeda tergantung timezone sesi. Simpan timestamp dalam UTC dan konversi di lapisan aplikasi.
Contoh Kode: JavaScript, Python, dan SQL
Snippet berikut mencakup skenario paling umum untuk konversi unix ke tanggal. Setiap contoh menggunakan timestamp konkret: 1717200000, yang sesuai dengan 1 Juni 2024, 00:00:00 UTC.
JavaScript: Konversi Unix Timestamp
Objek Date JavaScript bekerja dalam milidetik, jadi kalikan timestamp berbasis detik dengan 1000 terlebih dahulu.
// JavaScript konversi unix timestamp ke tanggal
const unixSeconds = 1717200000;
const date = new Date(unixSeconds * 1000); // konversi ke milidetik
// String UTC
console.log(date.toUTCString());
// Output: "Sat, 01 Jun 2024 00:00:00 GMT"
// Tampilan timezone lokal (menggunakan timezone browser/sistem)
console.log(date.toLocaleString("id-ID", { timeZone: "Asia/Jakarta" }));
// Output: "1/6/2024 07.00.00"
// Format ISO 8601
console.log(date.toISOString());
// Output: "2024-06-01T00:00:00.000Z"
Perhatikan bagaimana timestamp yang sama menampilkan sebagai 1 Juni pukul 07:00 di Jakarta karena UTC tengah malam adalah 7 pagi WIB. Ini bukan bug; ini adalah perilaku konversi timezone unix yang benar.
Python: Unix Timestamp ke Datetime
Modul datetime Python menyediakan metode yang bersih dan eksplisit. Selalu gunakan objek datetime yang timezone-aware dalam kode produksi.
from datetime import datetime, timezone
from zoneinfo import ZoneInfo # Python 3.9+
unix_seconds = 1717200000
# Python unix timestamp ke datetime (UTC)
dt_utc = datetime.fromtimestamp(unix_seconds, tz=timezone.utc)
print(dt_utc)
# Output: 2024-06-01 00:00:00+00:00
# Konversi ke timezone tertentu
dt_jakarta = dt_utc.astimezone(ZoneInfo("Asia/Jakarta"))
print(dt_jakarta)
# Output: 2024-06-01 07:00:00+07:00
# Format sebagai string yang dapat dibaca
print(dt_utc.strftime("%d %B %Y pada %H:%M UTC"))
# Output: 01 June 2024 pada 00:00 UTC
Menggunakan datetime.fromtimestamp() tanpa argumen tz mengembalikan datetime naif (timezone-unaware) dalam waktu sistem lokal, yang dapat menyebabkan bug tersembunyi di lingkungan server. Selalu berikan tz=timezone.utc sebagai kebiasaan.
SQL: Epoch ke Datetime
Baik PostgreSQL maupun MySQL mendukung konversi epoch ke datetime secara langsung.
-- PostgreSQL: konversi unix timestamp ke tanggal
SELECT TO_TIMESTAMP(1717200000) AS converted_date;
-- Output: 2024-06-01 00:00:00+00
-- MySQL: konversi unix ke tanggal
SELECT FROM_UNIXTIME(1717200000) AS converted_date;
-- Output: 2024-06-01 00:00:00
-- Catatan: FROM_UNIXTIME menggunakan timezone sesi. Set secara eksplisit:
SET time_zone = '+00:00';
SELECT FROM_UNIXTIME(1717200000);
Untuk panduan lebih mendalam tentang menyimpan dan query timestamp dalam database, lihat Unix Timestamps dalam Database: Best Practices untuk Storage dan Queries.
Kasus Penggunaan Umum: epoch ke datetime dalam Sistem Nyata
Memahami mekanisme adalah satu hal. Melihat bagaimana konversi epoch ke datetime bekerja dalam sistem nyata membuatnya lebih mudah dipahami. Berikut tiga skenario konkret yang diambil dari pola pengembangan SaaS umum.
Studi Kasus: Parsing REST API, Penyimpanan Database, dan Logging Backend
Bayangkan platform analytics SaaS yang mengambil event dari REST API pihak ketiga. Setiap response API menyertakan field seperti "event_time": 1717200000. Berikut cara tim menanganinya di setiap lapisan:
1. Parsing REST API
Service backend menerima payload JSON dan langsung memvalidasi satuan timestamp. Karena nilainya 10 digit, tim mengkonfirmasi bahwa itu dalam detik (13 digit akan menunjukkan milidetik). Service Python mengkonversinya ke objek datetime UTC-aware sebelum pemrosesan lebih lanjut. Ini memastikan bahwa fungsi downstream tidak pernah menerima integer mentah secara tidak sengaja.
2. Penyimpanan Database
Platform menyimpan nilai dalam kolom PostgreSQL bertipe TIMESTAMPTZ (timestamp with time zone). Aplikasi selalu insert dalam UTC menggunakan TO_TIMESTAMP(1717200000). Menyimpan dalam UTC berarti ketika perusahaan ekspansi untuk melayani user di berbagai wilayah, tidak perlu migrasi data. Query selalu filter dalam UTC dan konversi ke waktu lokal hanya di lapisan presentasi.
3. Backend Logging
Pipeline logging melampirkan string ISO 8601 UTC (2024-06-01T00:00:00Z) ke setiap log entry bersama Unix timestamp mentah. Pendekatan ganda ini berarti engineer dapat membaca log langsung tanpa tool konversi, sementara sistem monitoring otomatis masih dapat melakukan aritmatika presisi pada nilai integer. Ketika laporan bug mengatakan "error terjadi sekitar jam 9 pagi waktu Jakarta," tim mengkonversi itu ke rentang Unix timestamp dan query log langsung.
Pola tiga lapisan ini (parse, simpan dalam UTC, tampilkan lokal) adalah cara paling bersih untuk menangani konversi datetime dalam sistem produksi apa pun.
Tips Cepat: Jika kamu bekerja dengan bot Discord atau server komunitas, Unix timestamp juga menggerakkan format timestamp native Discord. Pelajari caranya dalam panduan kami tentang Cara Kerja Discord Timestamps dan Cara Menggunakannya di Server Kamu.
Kesimpulan
Mengkonversi Unix timestamp ke tanggal yang dapat dibaca mudah dipahami setelah kamu memahami tiga aturan: timestamp selalu UTC, satuannya detik atau milidetik (konfirmasi sebelum konversi), dan offset timezone diterapkan pada waktu display, bukan waktu penyimpanan. Baik kamu menulis JavaScript, Python, atau SQL, tool built-in dapat diandalkan selama kamu menggunakannya dengan argumen timezone eksplisit. Terapkan pola tiga lapisan dari studi kasus di atas (parse, simpan dalam UTC, tampilkan lokal) dan kamu akan menghindari jebakan paling umum dalam konversi datetime di sistem SaaS apa pun.
Konversi Unix Timestamp Apa Saja Secara Instan
Paste timestamp apa saja dan dapatkan tanggal UTC yang tepat, waktu lokal, dan breakdown timezone dalam satu klik. Tidak perlu setup, tidak perlu daftar.
Coba Konverter Gratis di unixtimestamp.app →
Timestamp berbasis detik adalah angka 10 digit (untuk tanggal sekitar 2026), sedangkan timestamp berbasis milidetik adalah 13 digit. Objek Date JavaScript menggunakan milidetik secara native. Untuk mengkonversi timestamp detik di JavaScript, kalikan dengan 1000 sebelum memberikannya ke new Date(). Mencampurkan kedua satuan adalah penyebab paling umum tanggal yang sangat salah.
Ini adalah perilaku yang diharapkan, bukan bug. Unix timestamp merepresentasikan momen UTC. Jika tengah malam UTC jatuh pada hari kalender sebelumnya untuk timezone kamu (misalnya, UTC 00:00 adalah 7 malam WIB hari sebelumnya), tanggal yang ditampilkan akan berbeda. Selalu tentukan timezone target secara eksplisit saat memformat untuk display.
Gunakan datetime.fromtimestamp(ts, tz=timezone.utc) dari modul datetime. Ini mengembalikan objek datetime UTC yang timezone-aware. Hindari memanggil datetime.fromtimestamp() tanpa argumen tz, karena menggunakan timezone sistem lokal dan membuat datetime naif yang dapat menyebabkan error tersembunyi di lingkungan server.
Simpan timestamp sebagai TIMESTAMPTZ (PostgreSQL) atau sebagai integer UTC. Hindari menyimpan string yang diformat seperti "1 Juni 2024" karena lebih sulit untuk query, sort, dan bandingkan. Konversi ke format yang dapat dibaca manusia hanya di lapisan aplikasi atau presentasi, menjaga database kamu netral timezone dan portabel.
Epoch Unix 1 Januari 1970 dipilih oleh developer Unix awal sebagai titik referensi yang nyaman dan terkini. Itu bukan kebutuhan teknis tetapi keputusan praktis yang dibuat pada awal 1970-an ketika Unix sedang dikembangkan di Bell Labs. Tanggal tersebut sejak itu menjadi standar universal untuk pengukuran waktu komputer.