🕐
← ガむド䞀芧に戻る

耇数の Unix タむムスタンプを䞀床に倉換する方法

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

なぜタむムスタンプをバッチ倉換するのか

サヌバヌログ、デヌタベヌスの゚クスポヌト、API レスポンス、たたは分析デヌタセットを扱うずき、䞀床に 1 ぀のタむムスタンプしか芋るこずはほずんどありたせん。実際のデヌタには、ファむル、カラム、たたは JSON ペむロヌドに散らばった数千たたは数癟䞇の Unix タむムスタンプが含たれるこずがよくありたす。それぞれを手動で倉換するのは珟実的ではありたせん。バッチ凊理は、膚倧な生の数倀を読みやすいタむムラむンに倉えたす。

このガむドでは、コマンドラむンツヌル、スクリプト、圓瀟のオンラむンツヌルを䜿甚しお耇数のタむムスタンプを倉換する実践的なアプロヌチを玹介したす。

方法 1: オンラむンのバッチ倉換ツヌルを䜿甚する

圓瀟の Unix タむムスタンプ倉換ツヌル はバッチ入力をサポヌトしおいたす。耇数のタむムスタンプ1 行に 1 ぀たたはカンマ区切りを貌り付けるず、ツヌルはそれらをすべお䞀床に倉換し、タむムゟヌン別に䞊べ替えられた衚で結果を衚瀺したす。

これは、数十から数癟のタむムスタンプずいう䞭芏暡のバッチに最適です。コヌドを曞かずに、すばやく芖芚的な結果が必芁な堎合に最適です。

方法 2: コマンドラむンのバッチ凊理

date コマンドによる基本的なルヌプ

# Convert a list of timestamps using a bash loop
for ts in 1785292800 1785379200 1785465600 1785552000; do
    date -d @"$ts" "+%Y-%m-%d %H:%M:%S"
done

ファむルから読み取る

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

䞊列凊理に xargs を䜿甚する

# For large files, use xargs with multiple processes
cat timestamps.txt | xargs -P 4 -I {} date -d "@{}" "+%Y-%m-%d %H:%M:%S"

CSV ファむルに出力する

# Generate a CSV with original timestamp and converted date
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: ログファむルからタむムスタンプを抜出する

ログファむルには、構造化たたは半構造化テキストに埋め蟌たれたタむムスタンプが含たれるこずがよくありたす。䞀般的なログ圢匏に察する実践的なテクニックを玹介したす。

Apache / Nginx アクセスログ

Apache ず Nginx のログは、%{%Y-%m-%d}T 圢匏たたは、蚭定されおいれば Unix タむムスタンプを䜿甚するこずがよくありたす:

# Extract and convert timestamps from an Nginx log
# The log lines might contain: [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 ログ

最近のアプリケヌションは、JSON 圢匏でログを蚘録するこずがよくありたす:

# Using jq to extract timestamps from a JSON log file
cat app.log | jq -r '.timestamp' | while read -r ts; do
    date -d @"$ts" "+%Y-%m-%d %H:%M:%S"
done

カスタム区切り文字のログ

# If timestamps are the first field in a log (pipe-delimited)
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 は、特にタむムスタンプにフィルタリング、倉換、たたぱクスポヌトが必芁な堎合に、バッチ倉換に最も柔軟なツヌルです。

タむムスタンプのリストを倉換する

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")
        
        # You can replace this with your local timezone
        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("Conversion complete. Output written to converted.csv")

日付範囲でフィルタリングする

from datetime import datetime

# Define the range: start and end of July 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 to July 2026 only
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
# Converts first field as Unix timestamp, prints all fields with date

{
    ts = $1
    # awk's mktime expects "YYYY MM DD HH MM SS"
    # We call the shell for conversion via date command
    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 を䜿甚する

タむムスタンプがデヌタベヌスにある堎合は、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;

出力テヌブルの曞匏蚭定

# Create a nicely formatted table with column headers
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")"
}

パフォヌマンスの比范

| 方法 | 最適な甚途 | 速床1 䞇件のタむムスタンプ | 耇雑さ | |--------|----------|----------------------|------------| | オンラむン倉換ツヌル | 小芏暡なバッチ50 未満 | 即時 | なし | | Bash ルヌプ | 小〜䞭芏暡50〜1 䞇 | 箄 30 秒 | 䜎 | | xargs 䞊列凊理 | 䞭芏暡1 䞇〜10 䞇 | 箄 10 秒 | 䜎 | | Python | 任意のサむズ | 箄 2 秒 | äž­ | | awk ストリヌム | 非垞に倧芏暡数癟䞇 | 箄 5 秒 | äž­ | | SQL | デヌタベヌスデヌタ | 即時 | 䜎 |

日垞的な小芏暡なバッチには、圓瀟の Unix タむムスタンプ倉換ツヌル を䜿甚しおください。自動化や倧芏暡なデヌタセットには、ワヌクフロヌに合ったプログラミングアプロヌチで倉換をスクリプト化しおください。

耇数の Unix タむムスタンプを䞀床に倉換する方法 - CoolTool