Konversi Unix Timestamp di SQL
Blog/Tutorial SQL/Konversi Unix Timestamp di SQL

Konversi Unix Timestamp di SQL

BimaBima
·3 September 2026·8 menit baca

Penulis

Bima

Bima

Founder & Data Professional

Bagikan

TL;DR

Unix timestamp adalah jumlah detik sejak 1 Januari 1970 UTC, dipakai banyak sistem buat nyimpen waktu sebagai satu angka. Di PostgreSQL, konversi ke tanggal pakai to_timestamp(angka), dan balik ke angka pakai EXTRACT(EPOCH FROM waktu). Di MySQL, pakai FROM_UNIXTIME dan UNIX_TIMESTAMP. Jebakan paling sering: nilai dalam milidetik harus dibagi 1000 dulu sebelum dikonversi.

Unix timestamp adalah jumlah detik sejak 1 Januari 1970 UTC, dan di SQL kamu konversi ke tanggal pakai to_timestamp di PostgreSQL atau FROM_UNIXTIME di MySQL.

Angka kayak 1704067200 sering muncul di kolom waktu hasil ekspor dari aplikasi, log event, atau API. Buat manusia, angka itu nggak ada artinya. Buat mesin, itu cara paling ringkas nyimpen waktu.

Di artikel ini kamu bakal belajar konversi dua arah, beda detik dan milidetik, cara nangani timezone, dan contoh nyata dari log transaksi toko UMKM.

Apa itu Unix timestamp?

Unix timestamp adalah cara nyimpen waktu sebagai satu angka: jumlah detik yang udah berlalu sejak tengah malam 1 Januari 1970 dalam waktu UTC. Titik awal itu disebut epoch. Karena cuma satu angka, timestamp gampang disimpan, diurutkan, dan dibandingkan tanpa pusing format tanggal.

Banyak sistem nyimpen waktu begini biar konsisten lintas timezone. Satu angka yang sama artinya sama di server mana pun. Baca lebih lanjut soal Unix timestamp dan konsep epoch time kalau mau paham dasarnya.

Gimana cara konversi Unix timestamp ke tanggal di PostgreSQL?

Pakai fungsi to_timestamp dengan angka epoch-nya sebagai argumen. PostgreSQL balikin nilai bertipe timestamptz dalam UTC, yang bisa langsung kamu format atau geser ke timezone lokal. Fungsi ini nerima detik, bukan milidetik.

SELECT to_timestamp(1704067200);
-- hasil: 2024-01-01 00:00:00+00

Kalau kolomnya bertipe bigint bernama created_epoch, tinggal bungkus kolomnya:

SELECT id, to_timestamp(created_epoch) AS waktu
FROM transaksi;

Buat balik dari tanggal ke angka epoch, pakai EXTRACT dengan EPOCH. Hasilnya berupa angka desimal, jadi cast ke bigint kalau kamu mau angka bulat.

SELECT EXTRACT(EPOCH FROM TIMESTAMP '2024-01-01 00:00:00')::bigint;
-- hasil: 1704067200

Gimana cara konversi Unix timestamp di MySQL?

MySQL punya dua fungsi pasangan: FROM_UNIXTIME buat ngubah angka jadi tanggal, dan UNIX_TIMESTAMP buat ngubah tanggal jadi angka. Sama kayak PostgreSQL, input dan output default ngikutin detik, bukan milidetik.

SELECT FROM_UNIXTIME(1704067200);
-- hasil: 2024-01-01 07:00:00 (kalau timezone server WIB)

SELECT UNIX_TIMESTAMP('2024-01-01 00:00:00');
-- hasil: 1704067200

Bedanya, FROM_UNIXTIME ngikutin timezone yang diset di session MySQL. Jadi kalau server-nya WIB, hasilnya udah digeser 7 jam. Ini beda sama PostgreSQL to_timestamp yang selalu balikin UTC dulu.

Detik atau milidetik? Ini jebakan paling sering

Banyak aplikasi modern, terutama dari JavaScript, nyimpen timestamp dalam milidetik, bukan detik. Angkanya jadi 13 digit, bukan 10 digit. Kalau kamu langsung masukin ke to_timestamp tanpa penyesuaian, hasilnya lompat ribuan tahun ke depan.

SatuanContoh nilaiJumlah digit
Detik170406720010
Milidetik170406720000013

Aturannya gampang: kalau angkanya 13 digit, bagi 1000 dulu.

SELECT to_timestamp(1704067200000 / 1000);

Cek cepat: timestamp detik buat tahun 2020-an itu di kisaran 1,6 sampai 1,8 miliar. Kalau angkamu jauh lebih besar, kemungkinan besar itu milidetik.

Cara nangani timezone waktu konversi

Unix timestamp selalu UTC. Kalau kamu di Indonesia dan mau nampilin waktu lokal, geser ke Asia/Jakarta pakai AT TIME ZONE di PostgreSQL.

SELECT to_timestamp(1704067200) AT TIME ZONE 'Asia/Jakarta';
-- hasil: 2024-01-01 07:00:00

Selisih 7 jam itu WIB. Kalau kamu lewatin langkah ini, laporan harian bisa salah tanggal buat transaksi yang kejadian menjelang tengah malam. Bahas lengkap soal ini ada di menangani timezone pada data waktu di SQL.

Contoh kasus: log transaksi toko_berkah

Aku pegang tabel log dari aplikasi kasir toko_berkah. Kolom waktunya bernama waktu_epoch, bertipe bigint, dan isinya angka epoch dalam detik. Ada 4.200 baris transaksi selama satu bulan.

Aku mau tau jam berapa toko paling ramai. Query-nya konversi epoch ke waktu WIB, ambil jamnya, terus hitung per jam.

SELECT
  EXTRACT(HOUR FROM to_timestamp(waktu_epoch) AT TIME ZONE 'Asia/Jakarta') AS jam,
  COUNT(*) AS jumlah
FROM log_transaksi
GROUP BY jam
ORDER BY jumlah DESC;

Hasilnya kelihatan: 31% transaksi (1.302 dari 4.200) numpuk di jam 17 sampai 19. Sore hari pas orang pulang kerja. Tanpa konversi timezone, angka ini bakal ketarik ke jam 10 sampai 12 karena masih UTC, dan kesimpulannya salah total.

Kesalahan umum konversi Unix timestamp

  • Lupa cek detik vs milidetik. Angka 13 digit yang nggak dibagi 1000 ngasih tahun yang absurd.
  • Ngira hasilnya udah lokal. to_timestamp balikin UTC. Kamu harus geser sendiri ke WIB.
  • Nyimpen epoch di kolom INT biasa. INT 32-bit mentok di tahun 2038. Pakai bigint biar aman.
  • Bandingin epoch sama tanggal langsung. Konversi salah satunya dulu biar tipe datanya cocok.

FAQ

Pertanyaan yang sering muncul soal Unix timestamp di SQL.

Penutup

Konversi Unix timestamp intinya dua fungsi: to_timestamp dan EXTRACT EPOCH di PostgreSQL, atau FROM_UNIXTIME dan UNIX_TIMESTAMP di MySQL. Dua hal yang wajib kamu cek tiap kali: apakah angkanya detik atau milidetik, dan apakah hasilnya perlu digeser ke WIB.

Sekali kamu terbiasa, kolom angka gede itu nggak bikin bingung lagi. Mau latihan query tanggal lain? Kulik latihan SQL di NgulikSQL, dan lanjut baca cara bikin tabel kalender di SQL buat analisa per periode. Detail fungsinya ada di dokumentasi PostgreSQL date/time functions.

Coba Langsung

Mau praktek langsung? Mulai latihan SQL gratis

Latihan interaktif, langsung di browser.

Buka NgulikSQL →
Bagikan:
Bima
Ditulis oleh

Bima

Founder & Data Professional

Founder Ngulik Data. Passionate about making data analysis accessible for everyone.

Artikel terkait

Composite Index di SQL: Cara Kerja dan Urutan Kolom
Tutorial SQL
8 Oktober 2026•8 menit baca

Composite Index di SQL: Cara Kerja dan Urutan Kolom

Composite index itu index atas beberapa kolom sekaligus. Urutan kolomnya nentuin query mana yang kebantu, lewat aturan leftmost prefix.

BimaBima
Menghitung Stickiness (DAU/MAU) di SQL
Tutorial SQL
5 Oktober 2026•10 menit baca

Menghitung Stickiness (DAU/MAU) di SQL

Stickiness ngukur seberapa sering user balik lagi. Ini cara hitung DAU, MAU, dan rasio stickiness pakai SQL, plus contoh aplikasi UMKM.

BimaBima
Menghitung DAU dan MAU dengan SQL
Tutorial SQL
3 Oktober 2026•9 menit baca

Menghitung DAU dan MAU dengan SQL

DAU dan MAU dua metrik wajib buat produk digital. Ini cara hitungnya pakai SQL, lengkap query DISTINCT, per bulan, sampai rasio stickiness.

BimaBima
Kembali ke Blog
Ngulik Data logoNgulik Data

Platform edukasi data lengkap untuk professionals Indonesia. Belajar SQL, Data Analysis, dan lebih banyak lagi dengan praktek langsung dan feedback real-time.

© 2026 Ngulik Data. Semua hak dilindungi.

TAUTAN
BantuanHargaDatasetBlogAfiliasi
LEGAL
Syarat & KetentuanKebijakan Privasi
Ngulik Data
DatasetLeaderboardBlogStore