🕐
← Rehberlere dön

Birden Fazla Unix Zaman Damgası Aynı Anda Nasıl Dönüştürülür

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

Zaman Damgaları Neden Toplu Dönüştürülür?

Sunucu günlükleri, veritabanı dışa aktarımları, API yanıtları veya analitik veri kümeleri ile çalışırken, nadiren bir seferde tek bir zaman damgasıyla karşılaşırsınız. Gerçek dünya verileri genellikle dosyalara, sütunlara veya JSON yüklerine yayılmış binlerce veya milyonlarca Unix zaman damgası içerir. Her birini manuel olarak dönüştürmek pratik değildir. Toplu işleme, ham sayı dağlarını okunabilir zaman çizelgelerine dönüştürür.

Bu kılavuz, komut satırı araçları, betikler ve çevrimiçi aracımızı kullanarak birden fazla zaman damgasını dönüştürmek için pratik yaklaşımları kapsar.

Yöntem 1: Çevrimiçi Toplu Dönüştürücüyü Kullanma

Unix Zaman Damgası Dönüştürücümüz toplu girişi destekler. Birden fazla zaman damgasını (satır başına bir tane veya virgülle ayrılmış) yapıştırın ve araç hepsini aynı anda dönüştürerek sonuçları saat dilimine göre sıralanmış bir tabloda gösterir.

Bu, kod yazmadan hızlı ve görsel bir sonuca ihtiyacınız olan orta ölçekli toplu işler — düzinelerce ila yüzlerce zaman damgası — için idealdir.

Yöntem 2: Komut Satırı Toplu İşleme

date Komutu ile Temel Döngü

# Bir bash döngüsü kullanarak zaman damgaları listesini dönüştürme
for ts in 1785292800 1785379200 1785465600 1785552000; do
    date -d @"$ts" "+%Y-%m-%d %H:%M:%S"
done

Bir Dosyadan Okuma

# timestamps.txt her satırda bir zaman damgası içerir
while read -r ts; do
    date -d @"$ts" "+%Y-%m-%d %H:%M:%S"
done < timestamps.txt

Paralel İşleme için xargs Kullanma

# Büyük dosyalar için birden fazla işlem ile xargs kullanın
cat timestamps.txt | xargs -P 4 -I {} date -d "@{}" "+%Y-%m-%d %H:%M:%S"

CSV Dosyasına Çıktı Alma

# Orijinal zaman damgası ve dönüştürülmüş tarih ile bir CSV oluşturma
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

Yöntem 3: Günlük Dosyalarından Zaman Damgalarını Çıkarma

Günlük dosyaları genellikle yapılandırılmış veya yarı yapılandırılmış metin içinde gömülü zaman damgaları içerir. İşte yaygın günlük biçimleri için pratik teknikler.

Apache / Nginx Erişim Günlükleri

Apache ve Nginx günlükleri genellikle %{%Y-%m-%d}T biçimini veya yapılandırılmışsa Unix zaman damgalarını kullanır:

# Bir Nginx günlüğünden zaman damgalarını çıkarma ve dönüştürme
# Günlük satırları şunları içerebilir: [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 Günlükleri

Modern uygulamalar genellikle JSON biçiminde günlük kaydeder:

# Bir JSON günlük dosyasından zaman damgalarını çıkarmak için jq kullanma
cat app.log | jq -r '.timestamp' | while read -r ts; do
    date -d @"$ts" "+%Y-%m-%d %H:%M:%S"
done

Özel Sınırlandırılmış Günlükler

# Zaman damgaları bir günlüğün ilk alanıysa (pipe ile ayrılmış)
awk -F'|' '{ts=$1; cmd="date -d @" ts " \"+%Y-%m-%d %H:%M:%S\""; cmd | getline date; close(cmd); print date, $0}' server.log

Yöntem 4: Gelişmiş Toplu İşleme için Python Kullanma

Python, özellikle zaman damgalarının filtrelenmesi, dönüştürülmesi veya dışa aktarılması gerektiğinde, toplu dönüştürme için en esnek araçtır.

Zaman Damgası Listesini Dönüştürme

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 Dosyasını İşleme

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")
        
        # Bunu kendi yerel saat diliminizle değiştirebilirsiniz
        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")

Tarih Aralığına Göre Filtreleme

from datetime import datetime

# Aralığı tanımlayın: Temmuz 2026'nın başı ve sonu
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]

# Yalnızca Temmuz 2026'ya filtreleme
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')}")

Yöntem 5: Akış Dönüşümü için awk Kullanma

Çok büyük dosyalar (milyonlarca satır) için awk, her şeyi belleğe yüklemeden verileri bir akış olarak işler:

#!/usr/bin/awk -f
# batch-convert.awk
# İlk alanı Unix zaman damgası olarak dönüştürür, tüm alanları tarihle birlikte yazdırır

{
    ts = $1
    # awk'nin mktime'ı "YYYY MM DD HH MM SS" bekler
    # Dönüştürme için date komutu aracılığıyla kabuğu çağırıyoruz
    cmd = "date -d @" ts " \"+%Y-%m-%d %H:%M:%S\""
    cmd | getline date
    close(cmd)
    print date, $0
}

Kullanım:

./batch-convert.awk server.log

Yöntem 6: Veritabanı Zaman Damgaları için SQL Kullanma

Zaman damgalarınız bir veritabanındaysa, işi SQL'in yapmasına izin verin:

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;

Çıktı Tablolarını Biçimlendirme

# Sütun başlıkları ile düzgün biçimlendirilmiş bir tablo oluşturma
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")"
}

Performans Karşılaştırması

| Yöntem | En Uygun Olduğu Durum | Hız (10K zaman damgası) | Karmaşıklık | |--------|----------|----------------------|------------| | Çevrimiçi dönüştürücü | Küçük toplu işler (< 50) | Anında | Yok | | Bash döngüsü | Küçük-orta (50-10K) | ~30sn | Düşük | | xargs paralel | Orta (10K-100K) | ~10sn | Düşük | | Python | Her boyut | ~2sn | Orta | | awk akışı | Çok büyük (milyonlarca) | ~5sn | Orta | | SQL | Veritabanı verisi | Anında | Düşük |

Hızlı, günlük toplu işler için Unix Zaman Damgası Dönüştürücümüzü kullanın. Otomasyon ve büyük veri kümeleri için, iş akışınıza uyan programlama yaklaşımıyla dönüştürmeyi betikleyin.