Bekerja dengan Unix Timestamp di Bahasa Pemrograman
Mengapa Unix Timestamp dalam Pemrograman?
Unix timestamp adalah mata uang universal waktu dalam perangkat lunak. Mereka membuat aritmatika tanggal menjadi sepele (cukup tambah atau kurangi detik), menghilangkan kebingungan zona waktu, dan terserialisasi dengan rapi ke JSON. Setiap bahasa pemrograman menyediakan fungsi yang mudah untuk bekerja dengannya, tetapi API-nya sedikit berbeda. Panduan ini mencakup bahasa yang paling umum dan praktik terbaiknya.
JavaScript (Browser dan Node.js)
JavaScript menggunakan milidetik untuk objek Date-nya, sementara sebagian besar sistem lain menggunakan detik. Ini adalah sumber bug yang paling umum.
Mendapatkan Timestamp Saat Ini
// Milidetik sejak epoch (JavaScript standar)
const nowMs = Date.now(); // 1785292800000
// Detik sejak epoch (untuk kompatibilitas)
const nowSec = Math.floor(Date.now() / 1000); // 1785292800
// Timer resolusi tinggi Node.js (mikrodetik)
const hrTime = process.hrtime.bigint();
Mengonversi Timestamp ke Tanggal
// Dari detik (sebagian besar API dan basis data)
const timestamp = 1785292800;
const date = new Date(timestamp * 1000); // Kalikan dengan 1000!
// Dari milidetik (native JavaScript)
const dateFromMs = new Date(1785292800000);
// Format hasilnya
console.log(date.toISOString());
// Output: 2026-07-19T00:00:00.000Z
console.log(date.toLocaleString("en-US", { timeZone: "America/New_York" }));
// Output: 7/18/2026, 8:00:00 PM
Mengurai String Tanggal ke Timestamp
// Menggunakan Date.parse() (mengembalikan milidetik)
const ms = Date.parse("2026-07-19T00:00:00Z");
const sec = ms / 1000; // 1785292800
// Menggunakan konstruktor Date
const ts = Math.floor(new Date("2026-07-19 UTC").getTime() / 1000);
Peringatan: Perilaku Date.parse() bervariasi di antara browser untuk string tanggal non-standar. Menggunakan format ISO 8601 dengan penentu zona waktu (Z untuk UTC) adalah yang paling aman.
Bekerja dengan Zona Waktu di JavaScript
// Format dalam zona waktu tertentu
const date = new Date(1785292800 * 1000);
const options = {
timeZone: "Asia/Tokyo",
year: "numeric", month: "2-digit", day: "2-digit",
hour: "2-digit", minute: "2-digit", second: "2-digit",
};
console.log(date.toLocaleString("ja-JP", options));
// Output: 07/19/2026 09:00:00
Untuk operasi zona waktu yang lebih lanjut, API Intl.DateTimeFormat atau pustaka seperti date-fns-tz dan Luxon direkomendasikan.
Python
Python menyediakan modul tingkat rendah (time) dan tingkat tinggi (datetime) untuk bekerja dengan timestamp.
Mendapatkan Timestamp Saat Ini
import time
# Detik sebagai float (termasuk milidetik pecahan)
current = time.time()
# Contoh: 1785292800.123456
# Sebagai bilangan bulat
current_int = int(time.time())
Mengonversi Timestamp ke Datetime
from datetime import datetime
# Datetime UTC (Python 3.x)
dt_utc = datetime.utcfromtimestamp(1785292800)
# Datetime sadar zona waktu (Python 3.9+ dengan zoneinfo)
from zoneinfo import ZoneInfo
dt_tokyo = datetime.fromtimestamp(1785292800, tz=ZoneInfo("Asia/Tokyo"))
# String terformat
print(dt_utc.strftime("%Y-%m-%d %H:%M:%S"))
# Output: 2026-07-19 00:00:00
Mengurai String Tanggal ke Timestamp
import time
from datetime import datetime
# Dari string tanggal
dt = datetime.strptime("2026-07-19 00:00:00", "%Y-%m-%d %H:%M:%S")
timestamp = time.mktime(dt.timetuple()) # Diperlakukan sebagai waktu lokal
# Untuk input UTC
from datetime import timezone
timestamp_utc = dt.replace(tzinfo=timezone.utc).timestamp()
Bekerja dengan Pandas (Analisis Data)
import pandas as pd
# Konversi kolom Unix timestamp ke datetime
df["timestamp"] = pd.to_datetime(df["unix_seconds"], unit="s")
# Konversi ke unit yang berbeda
df["datetime_ms"] = pd.to_datetime(df["unix_milliseconds"], unit="ms")
# Tetapkan zona waktu
df["timestamp_ny"] = df["timestamp"].dt.tz_localize("UTC").dt.tz_convert("America/New_York")
PHP
PHP memiliki API paling sederhana untuk operasi timestamp.
Mendapatkan Timestamp Saat Ini
<?php
$now = time(); // Bilangan bulat: 1785292800
$nowMicro = microtime(); // String: "0.12345600 1785292800"
$nowFloat = microtime(true); // Float: 1785292800.1235
Mengonversi Timestamp ke Tanggal
<?php
echo date("Y-m-d H:i:s", 1785292800);
// Output: 2026-07-19 00:00:00
// Dengan zona waktu
$tz = new DateTimeZone("Europe/London");
$dt = new DateTime("@1785292800");
$dt->setTimezone($tz);
echo $dt->format("Y-m-d H:i:s");
Go
Paket time Go dirancang dengan baik tetapi memerlukan pemahaman eksplisit tentang tipe yang terlibat.
Mendapatkan Timestamp Saat Ini
package main
import (
"fmt"
"time"
)
func main() {
now := time.Now()
sec := now.Unix() // int64 detik
milli := now.UnixMilli() // int64 milidetik
nano := now.UnixNano() // int64 nanodetik
fmt.Printf("Detik: %d\n", sec)
}
Mengonversi Timestamp ke Tanggal
t := time.Unix(1785292800, 0)
fmt.Println(t.UTC())
// Output: 2026-07-19 00:00:00 +0000 UTC
// Format sebagai string
fmt.Println(t.Format("2006-01-02 15:04:05"))
// Output: 2026-07-19 00:00:00
// Dengan zona waktu
loc, _ := time.LoadLocation("America/Chicago")
fmt.Println(t.In(loc))
Rust
use std::time::{SystemTime, UNIX_EPOCH};
// Timestamp saat ini
let now = SystemTime::now()
.duration_since(UNIX_EPOCH)
.expect("Waktu berjalan mundur");
println!("Detik: {}", now.as_secs());
// Timestamp ke tanggal
let dt = chrono::NaiveDateTime::from_timestamp_opt(1785292800, 0).unwrap();
println!("{}", dt.format("%Y-%m-%d %H:%M:%S"));
Penyimpanan Basis Data: Praktik Terbaik
Memilih Tipe Kolom yang Tepat
| Basis Data | Tipe yang Direkomendasikan | Catatan |
|----------|-----------------|-------|
| PostgreSQL | TIMESTAMP WITH TIME ZONE atau BIGINT | Tipe timestamp native lebih disarankan |
| MySQL / MariaDB | INT UNSIGNED (untuk tanggal hingga 2106) atau BIGINT | Hindari tipe TIMESTAMP (rentang berakhir pada 2038) |
| SQLite | INTEGER | SQLite tidak memiliki tipe timestamp native |
| MongoDB | Objek Date atau int64 | BSON Date secara internal adalah timestamp 64-bit |
Contoh PostgreSQL
-- Simpan sebagai timestamp native
CREATE TABLE events (
id SERIAL PRIMARY KEY,
occurred_at TIMESTAMP WITH TIME ZONE NOT NULL,
payload JSONB
);
-- Sisipkan dengan waktu saat ini
INSERT INTO events (occurred_at) VALUES (NOW());
-- Query sebagai Unix timestamp
SELECT EXTRACT(EPOCH FROM occurred_at) AS unix_ts FROM events;
Contoh MySQL
-- Menggunakan BIGINT untuk penyimpanan tahan masa depan
CREATE TABLE logs (
id INT AUTO_INCREMENT PRIMARY KEY,
event_time BIGINT NOT NULL,
message TEXT
);
-- Sisipkan timestamp saat ini
INSERT INTO logs (event_time, message) VALUES (UNIX_TIMESTAMP(), 'Server dimulai');
-- Query dan konversi
SELECT FROM_UNIXTIME(event_time) AS readable_time FROM logs;
Tabel Perbandingan Bahasa
| Bahasa | Timestamp Saat Ini | Timestamp ke Tanggal | Tanggal ke Timestamp | Resolusi |
|----------|-------------------|-------------------|-------------------|------------|
| JavaScript | Date.now() | new Date(ts * 1000) | Date.parse(str) / 1000 | Milidetik |
| Python | time.time() | datetime.fromtimestamp(ts) | datetime.strptime(str).timestamp() | Float detik |
| PHP | time() | date("Y-m-d", ts) | strtotime(str) | Detik |
| Go | time.Now().Unix() | time.Unix(ts, 0) | time.Parse(layout, str).Unix() | Detik |
| Rust | SystemTime::now() | NaiveDateTime::from_timestamp_opt() | — | Berbagai |
Apa pun bahasa yang Anda gunakan, Unix Timestamp Converter kami adalah pendamping yang andal untuk pemeriksaan cepat dan debugging.