วิธีแปลง Unix Timestamp หลายค่าพร้อมกัน
ทำไมต้องแปลง Timestamp แบบกลุ่ม?
เมื่อคุณทำงานกับ server logs, การส่งออกฐานข้อมูล, การตอบกลับ API หรือชุดข้อมูลวิเคราะห์ คุณแทบจะไม่เคยพบ timestamp ทีละค่าเลย ข้อมูลในโลกจริงมักมี Unix timestamp นับพันหรือนับล้านกระจายอยู่ทั่วไฟล์ คอลัมน์ หรือ JSON payload การแปลงแต่ละค่าด้วยตนเองนั้นทำไม่ได้จริง การประมวลผลแบบกลุ่มเปลี่ยนภูเขาของตัวเลขดิบให้เป็นเส้นเวลาที่อ่านได้
คู่มือนี้นำเสนอวิธีการที่ใช้งานได้จริงสำหรับการแปลง timestamp หลายค่าพร้อมกันโดยใช้เครื่องมือ command-line, สคริปต์ และเครื่องมือออนไลน์ของเรา
วิธีที่ 1: ใช้ตัวแปลงแบบกลุ่มออนไลน์
Unix Timestamp Converter ของเรารองรับการป้อนข้อมูลแบบกลุ่ม วาง timestamp หลายค่า (หนึ่งค่าต่อบรรทัดหรือคั่นด้วยเครื่องหมายจุลภาค) และเครื่องมือจะแปลงทั้งหมดในครั้งเดียว แสดงผลลัพธ์ในตารางที่เรียงตามเขตเวลา
วิธีนี้เหมาะสำหรับกลุ่มขนาดปานกลาง — หลายสิบถึงหลายร้อย timestamp — ที่คุณต้องการผลลัพธ์ที่รวดเร็วและมองเห็นได้โดยไม่ต้องเขียนโค้ด
วิธีที่ 2: การประมวลผลแบบกลุ่มด้วย Command-Line
ลูปพื้นฐานด้วยคำสั่ง date
# แปลงรายการ timestamp โดยใช้ bash loop
for ts in 1785292800 1785379200 1785465600 1785552000; do
date -d @"$ts" "+%Y-%m-%d %H:%M:%S"
done
อ่านจากไฟล์
# timestamps.txt มีหนึ่ง timestamp ต่อบรรทัด
while read -r ts; do
date -d @"$ts" "+%Y-%m-%d %H:%M:%S"
done < timestamps.txt
ใช้ xargs สำหรับการประมวลผลแบบขนาน
# สำหรับไฟล์ขนาดใหญ่ ใช้ xargs พร้อมหลายโพรเซส
cat timestamps.txt | xargs -P 4 -I {} date -d "@{}" "+%Y-%m-%d %H:%M:%S"
ส่งออกเป็นไฟล์ CSV
# สร้าง CSV พร้อม timestamp ต้นฉบับและวันที่ที่แปลงแล้ว
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
วิธีที่ 3: การแยก Timestamp จากไฟล์ล็อก
ไฟล์ล็อกมักมี timestamp ฝังอยู่ในข้อความที่มีโครงสร้างหรือกึ่งโครงสร้าง นี่คือเทคนิคที่ใช้งานได้จริงสำหรับรูปแบบล็อกทั่วไป
Apache / Nginx Access Logs
Apache และ Nginx logs มักใช้รูปแบบ %{%Y-%m-%d}T หรือหากกำหนดค่าไว้ จะใช้ Unix timestamp:
# แยกและแปลง timestamp จาก Nginx log
# บรรทัดล็อกอาจมี: [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
JSON Logs
แอปพลิเคชันสมัยใหม่มักบันทึกล็อกในรูปแบบ JSON:
# ใช้ jq เพื่อแยก timestamp จากไฟล์ล็อก JSON
cat app.log | jq -r '.timestamp' | while read -r ts; do
date -d @"$ts" "+%Y-%m-%d %H:%M:%S"
done
ล็อกที่คั่นด้วยตัวคั่นแบบกำหนดเอง
# หาก timestamp เป็นฟิลด์แรกในล็อก (คั่นด้วย 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
วิธีที่ 4: ใช้ Python สำหรับการประมวลผลแบบกลุ่มขั้นสูง
Python เป็นเครื่องมือที่ยืดหยุ่นที่สุดสำหรับการแปลงแบบกลุ่ม โดยเฉพาะเมื่อ timestamp ต้องการการกรอง การแปลง หรือการส่งออก
แปลงรายการ 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))
ประมวลผลไฟล์ 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")
# คุณสามารถแทนที่ด้วยเขตเวลาท้องถิ่นของคุณ
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("การแปลงเสร็จสมบูรณ์ ผลลัพธ์ถูกเขียนไปยัง converted.csv")
กรองตามช่วงวันที่
from datetime import datetime
# กำหนดช่วง: เริ่มต้นและสิ้นสุดเดือนกรกฎาคม 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]
# กรองเฉพาะเดือนกรกฎาคม 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')}")
วิธีที่ 5: ใช้ awk สำหรับการแปลงแบบสตรีม
สำหรับไฟล์ขนาดใหญ่มาก (หลายล้านแถว) awk ประมวลผลข้อมูลเป็นสตรีมโดยไม่ต้องโหลดทั้งหมดเข้าหน่วยความจำ:
#!/usr/bin/awk -f
# batch-convert.awk
# แปลงฟิลด์แรกเป็น Unix timestamp พิมพ์ทุกฟิลด์พร้อมวันที่
{
ts = $1
# mktime ของ awk คาดหวังรูปแบบ "YYYY MM DD HH MM SS"
# เราเรียก shell เพื่อแปลงผ่านคำสั่ง date
cmd = "date -d @" ts " \"+%Y-%m-%d %H:%M:%S\""
cmd | getline date
close(cmd)
print date, $0
}
การใช้งาน:
./batch-convert.awk server.log
วิธีที่ 6: ใช้ SQL สำหรับ Timestamp ในฐานข้อมูล
หาก timestamp ของคุณอยู่ในฐานข้อมูล ให้ SQL จัดการ:
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;
การจัดรูปแบบตารางผลลัพธ์
# สร้างตารางที่มีรูปแบบสวยงามพร้อมหัวคอลัมน์
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")"
}
การเปรียบเทียบประสิทธิภาพ
| วิธีการ | เหมาะสำหรับ | ความเร็ว (10K timestamp) | ความซับซ้อน | |--------|----------|----------------------|------------| | ตัวแปลงออนไลน์ | กลุ่มเล็ก (< 50) | ทันที | ไม่มี | | Bash loop | ขนาดเล็ก-กลาง (50-10K) | ~30 วินาที | ต่ำ | | xargs แบบขนาน | กลาง (10K-100K) | ~10 วินาที | ต่ำ | | Python | ทุกขนาด | ~2 วินาที | ปานกลาง | | awk stream | ขนาดใหญ่มาก (ล้าน) | ~5 วินาที | ปานกลาง | | SQL | ข้อมูลฐานข้อมูล | ทันที | ต่ำ |
สำหรับการแปลงแบบกลุ่มในชีวิตประจำวัน ใช้ Unix Timestamp Converter ของเรา สำหรับระบบอัตโนมัติและชุดข้อมูลขนาดใหญ่ เขียนสคริปต์การแปลงด้วยวิธีการเขียนโปรแกรมที่ตรงกับเวิร์กโฟลว์ของคุณ