🕐
← Kembali ke Panduan

Cara Mengonversi Banyak Unix Timestamp Sekaligus

· Tag: batch-processing, log-analysis, automation, unix-timestamp, shell-scripting, data-processing

Mengapa Mengonversi Timestamp Secara Batch?

Saat Anda bekerja dengan log server, ekspor basis data, respons API, atau dataset analitik, Anda jarang menemukan satu timestamp dalam satu waktu. Data dunia nyata sering kali berisi ribuan atau jutaan Unix timestamp yang tersebar di file, kolom, atau payload JSON. Mengonversi masing-masing secara manual tidak praktis. Pemrosesan batch mengubah tumpukan angka mentah menjadi garis waktu yang dapat dibaca.

Panduan ini mencakup pendekatan praktis untuk mengonversi banyak timestamp menggunakan alat baris perintah, skrip, dan alat online kami.

Metode 1: Menggunakan Konverter Batch Online

Unix Timestamp Converter kami mendukung input batch. Tempelkan beberapa timestamp (satu per baris atau dipisahkan koma) dan alat ini akan mengonversi semuanya sekaligus, menampilkan hasilnya dalam tabel yang diurutkan berdasarkan zona waktu.

Ini ideal untuk batch berukuran sedang — puluhan hingga ratusan timestamp — di mana Anda membutuhkan hasil visual yang cepat tanpa menulis kode.

Metode 2: Pemrosesan Batch Baris Perintah

Loop Dasar dengan Perintah date

# Konversi daftar timestamp menggunakan loop bash
for ts in 1785292800 1785379200 1785465600 1785552000; do
    date -d @"$ts" "+%Y-%m-%d %H:%M:%S"
done

Membaca dari File

# timestamps.txt berisi satu timestamp per baris
while read -r ts; do
    date -d @"$ts" "+%Y-%m-%d %H:%M:%S"
done < timestamps.txt

Menggunakan xargs untuk Pemrosesan Paralel

# Untuk file besar, gunakan xargs dengan beberapa proses
cat timestamps.txt | xargs -P 4 -I {} date -d "@{}" "+%Y-%m-%d %H:%M:%S"

Output ke File CSV

# Hasilkan CSV dengan timestamp asli dan tanggal yang dikonversi
echo "timestamp,date_utc,date_local" > output.csv
while read -r ts; do
    utc_date=$(TZ=UTC date -d @"$ts" "+%Y-%m-%d %H:%M:%S")
    local_date=$(date -d @"$ts" "+%Y-%m-%d %H:%M:%S")
    echo "$ts,$utc_date,$local_date" >> output.csv
done < timestamps.txt

Metode 3: Mengekstrak Timestamp dari File Log

File log sering kali berisi timestamp yang tertanam dalam teks terstruktur atau semi-terstruktur. Berikut adalah teknik praktis untuk format log umum.

Log Akses Apache / Nginx

Log Apache dan Nginx sering menggunakan format %{%Y-%m-%d}T atau, jika dikonfigurasi, Unix timestamp:

# Ekstrak dan konversi timestamp dari log Nginx
# Baris log mungkin berisi: [1785292800] GET /index.html 200
grep -oP '\[\K[0-9]{10}(?=\])' access.log | while read -r ts; do
    date -d @"$ts" "+%Y-%m-%d %H:%M:%S"
done

Log JSON

Aplikasi modern sering mencatat dalam format JSON:

# Menggunakan jq untuk mengekstrak timestamp dari file log JSON
cat app.log | jq -r '.timestamp' | while read -r ts; do
    date -d @"$ts" "+%Y-%m-%d %H:%M:%S"
done

Log dengan Pemisah Kustom

# Jika timestamp adalah field pertama dalam log (dipisahkan pipe)
awk -F'|' '{ts=$1; cmd="date -d @" ts " \"+%Y-%m-%d %H:%M:%S\""; cmd | getline date; close(cmd); print date, $0}' server.log

Metode 4: Menggunakan Python untuk Pemrosesan Batch Lanjutan

Python adalah alat paling fleksibel untuk konversi batch, terutama ketika timestamp memerlukan pemfilteran, transformasi, atau ekspor.

Mengonversi Daftar Timestamp

from datetime import datetime
import json

timestamps = [1785292800, 1785379200, 1785465600, 1785552000]

results = []
for ts in timestamps:
    dt = datetime.utcfromtimestamp(ts)
    results.append({
        "timestamp": ts,
        "datetime_utc": dt.strftime("%Y-%m-%d %H:%M:%S"),
        "date": dt.strftime("%Y-%m-%d"),
        "time": dt.strftime("%H:%M:%S"),
        "day_of_week": dt.strftime("%A"),
    })

print(json.dumps(results, indent=2))

Memproses File CSV

import csv
from datetime import datetime

with open("data.csv", "r") as infile, open("converted.csv", "w", newline="") as outfile:
    reader = csv.DictReader(infile)
    writer = csv.DictWriter(outfile, fieldnames=reader.fieldnames + ["date_utc", "date_local"])
    writer.writeheader()
    
    for row in reader:
        ts = int(row["timestamp"])
        dt_utc = datetime.utcfromtimestamp(ts)
        row["date_utc"] = dt_utc.strftime("%Y-%m-%d %H:%M:%S")
        
        # Anda dapat mengganti ini dengan zona waktu lokal Anda
        from datetime import timezone
        dt_local = datetime.fromtimestamp(ts, tz=timezone.utc).astimezone()
        row["date_local"] = dt_local.strftime("%Y-%m-%d %H:%M:%S %Z")
        
        writer.writerow(row)

print("Konversi selesai. Output ditulis ke converted.csv")

Memfilter Berdasarkan Rentang Tanggal

from datetime import datetime

# Tentukan rentang: awal dan akhir Juli 2026
start_ts = int(datetime(2026, 7, 1).timestamp())
end_ts   = int(datetime(2026, 7, 31, 23, 59, 59).timestamp())

timestamps = [1785292800, 1785379200, 1785465600, 1785552000,
              1234567890, 1000000000]

# Filter hanya Juli 2026
july_only = [ts for ts in timestamps if start_ts <= ts <= end_ts]

for ts in july_only:
    dt = datetime.utcfromtimestamp(ts)
    print(f"{ts} -> {dt.strftime('%Y-%m-%d %H:%M:%S')}")

Metode 5: Menggunakan awk untuk Konversi Streaming

Untuk file yang sangat besar (jutaan baris), awk memproses data sebagai stream tanpa memuat semuanya ke dalam memori:

#!/usr/bin/awk -f
# batch-convert.awk
# Mengonversi field pertama sebagai Unix timestamp, mencetak semua field dengan tanggal

{
    ts = $1
    # mktime awk mengharapkan "YYYY MM DD HH MM SS"
    # Kita memanggil shell untuk konversi melalui perintah date
    cmd = "date -d @" ts " \"+%Y-%m-%d %H:%M:%S\""
    cmd | getline date
    close(cmd)
    print date, $0
}

Penggunaan:

./batch-convert.awk server.log

Metode 6: Menggunakan SQL untuk Timestamp Basis Data

Jika timestamp Anda berada di basis data, biarkan SQL yang melakukan pekerjaan:

PostgreSQL

SELECT 
    id,
    event_time,
    to_timestamp(event_time) AS readable_time,
    to_char(to_timestamp(event_time), 'YYYY-MM-DD HH24:MI:SS') AS formatted_time
FROM events
WHERE to_timestamp(event_time) >= '2026-07-01';

MySQL

SELECT 
    id,
    event_time,
    FROM_UNIXTIME(event_time) AS readable_time,
    FROM_UNIXTIME(event_time, '%Y-%m-%d %H:%i:%s') AS formatted_time
FROM events
WHERE FROM_UNIXTIME(event_time) >= '2026-07-01';

SQLite

SELECT 
    id,
    event_time,
    datetime(event_time, 'unixepoch') AS readable_time,
    strftime('%Y-%m-%d %H:%M:%S', event_time, 'unixepoch') AS formatted_time
FROM events;

Memformat Tabel Output

# Buat tabel terformat rapi dengan header kolom
convert() {
    printf "%-15s %-25s %-25s\n" "TIMESTAMP" "UTC" "LOCAL"
    printf "%-15s %-25s %-25s\n" "---------------" "-------------------------" "-------------------------"
    while read -r ts; do
        utc=$(TZ=UTC date -d @"$ts" "+%Y-%m-%d %H:%M:%S")
        local=$(date -d @"$ts" "+%Y-%m-%d %H:%M:%S")
        printf "%-15s %-25s %-25s\n" "$ts" "$utc" "$local"
    done <<< "$(cat "$1")"
}

Perbandingan Kinerja

| Metode | Paling Cocok Untuk | Kecepatan (10K timestamp) | Kompleksitas | |--------|----------|----------------------|------------| | Konverter online | Batch kecil (< 50) | Instan | Tidak ada | | Bash loop | Kecil-sedang (50-10K) | ~30 detik | Rendah | | xargs paralel | Sedang (10K-100K) | ~10 detik | Rendah | | Python | Ukuran apa pun | ~2 detik | Sedang | | awk stream | Sangat besar (jutaan) | ~5 detik | Sedang | | SQL | Data basis data | Instan | Rendah |

Untuk batch sehari-hari yang cepat, gunakan Unix Timestamp Converter kami. Untuk otomatisasi dan dataset besar, skripkan konversinya menggunakan pendekatan pemrograman yang sesuai dengan alur kerja Anda.