webtrajans
tr

Unix timestamp nedir ve nasıl dönüştürülür?

Unix zaman damgası, 1 Ocak 1970 00:00:00 UTC'den bu yana geçen saniye sayısıdır ve saat diliminden bağımsızdır. Saniye-milisaniye karışıklığını, Türkiye saatiyle dönüşümü ve zamanlanmış görevlerde kullanılan cron söz dizimini anlatıyoruz.

Güncellendi: 5 dk okuma

Log dosyalarında, API yanıtlarında, veritabanı kayıtlarında ve JWT token’larında karşılaşılan 1791417600 gibi uzun sayılar, büyük olasılıkla Unix zaman damgasıdır. Bu yöntem bilgisayarların zamanı saklamasının en sade yoludur: saat dilimi, yaz saati veya tarih biçimi karmaşası yoktur, yalnızca bir sayı vardır. Bu rehberde Unix zamanının mantığını, saniye ile milisaniye farkını, Türkiye saatiyle dönüşümü ve 2038 sorununu anlatıyoruz. Bir zaman damgasını tarihe çevirmek için Unix zaman dönüştürücü aracımızı kullanabilirsiniz.

Unix zamanı nedir?

Unix zamanı (epoch time, POSIX time), 1 Ocak 1970 00:00:00 UTC’den bu yana geçen saniye sayısıdır.

Zaman damgası UTC tarih Türkiye saati (UTC+3)
0 1 Ocak 1970 00:00:00 1 Ocak 1970 02:00:00*
1791417600 8 Ekim 2026 00:00:00 8 Ekim 2026 03:00:00
1800000000 15 Ocak 2027 08:00:00 15 Ocak 2027 11:00:00
2147483647 19 Ocak 2038 03:14:07 19 Ocak 2038 06:14:07

* Türkiye 1970’te UTC+2 kullanıyordu; geçmiş tarihlerin yerel saate çevrilmesinde saat dilimi veritabanı (IANA) bu değişiklikleri dikkate alır.

Önemli özellikler:

  • Saat diliminden bağımsızdır: Aynı an İstanbul’da da New York’ta da aynı sayıdır.
  • Artık saniyeleri saymaz: Her gün tam 86.400 saniye kabul edilir.
  • Negatif olabilir: 1970 öncesi tarihler negatif sayılarla gösterilir.
  • Sıralama ve fark hesaplama kolaydır: İki zaman damgasının farkı doğrudan saniye cinsinden süreyi verir.

Saniye mi milisaniye mi?

En sık yapılan hata, saniye ve milisaniye cinsinden zaman damgalarını karıştırmaktır.

Birim Hane sayısı (günümüz) Kullananlar
Saniye 10 Unix/Linux, PHP, Python time.time() (ondalıklı), MySQL UNIX_TIMESTAMP(), JWT exp ve iat
Milisaniye 13 JavaScript Date.now(), Java System.currentTimeMillis()
Mikrosaniye / nanosaniye 16 / 19 Bazı veritabanları, Go, yüksek çözünürlüklü loglar

Saniye cinsinden bir değeri milisaniye bekleyen JavaScript’e verirseniz tarih 1970’in ocak ayına düşer; tersi durumda ise binlerce yıl sonrasına gider. Kural basit: 10 hane saniye, 13 hane milisaniye.

Farklı dillerde dönüşüm

// JavaScript
Math.floor(Date.now() / 1000);              // şu anki zaman (saniye)
new Date(1791417600 * 1000).toISOString();  // '2026-10-08T00:00:00.000Z'
new Date(1791417600 * 1000).toLocaleString('tr-TR', { timeZone: 'Europe/Istanbul' });
# Python
import time, datetime
int(time.time())
datetime.datetime.fromtimestamp(1791417600, tz=datetime.timezone.utc)
# Linux / macOS
date +%s                      # şu anki zaman
date -u -d @1791417600        # GNU (Linux)
date -u -r 1791417600         # BSD (macOS)
-- MySQL
SELECT FROM_UNIXTIME(1791417600);
-- PostgreSQL
SELECT to_timestamp(1791417600);

Saat dilimleri ve Türkiye

Türkiye 2016’dan beri yıl boyu UTC+3 kullandığı için güncel tarihlerde dönüşüm basittir: UTC saatine 3 saat eklenir. Ancak:

  • Sunucunun saat dilimi ayarı (TZ) yerel tarihe çevirmede kullanılır; bulut sunucuları genellikle UTC’dedir.
  • Veritabanında UTC saklayıp yalnızca gösterimde yerel saate çevirmek en güvenli yöntemdir.
  • Yurt dışı kullanıcılarınız varsa her kullanıcının kendi saat dilimini dikkate alın.

Saat dilimleri ve yaz saati kuralları için saat dilimleri rehberimize bakabilirsiniz.

2038 sorunu

Zamanı işaretli 32 bitlik tam sayı olarak saklayan sistemlerde en büyük değer 2.147.483.647’dir. Bu sayı 19 Ocak 2038 03:14:07 UTC’ye (Türkiye saatiyle 06:14:07) karşılık gelir. Bir saniye sonra değer taşar ve negatife döner; sistem tarihi 1901 yılı olarak yorumlayabilir.

Etkilenebilecekler:

  • Eski gömülü sistemler, endüstriyel cihazlar, bazı IoT donanımları
  • 32 bitlik time_t kullanan eski yazılımlar
  • Veritabanlarında 32 bitlik tam sayı sütunlarında saklanan zaman damgaları (örneğin MySQL’in TIMESTAMP tipi tarihsel olarak 2038 ile sınırlıdır)

Modern 64 bitlik sistemler milyarlarca yıl sonrasını gösterebilir. Yeni projelerde zaman damgalarını 64 bitlik (BIGINT) alanlarda saklamak yeterli önlemdir.

Cron ifadeleri: zamanlanmış görevler

Zaman damgasıyla yakından ilişkili bir başka konu, sunucularda görevleri belirli zamanlarda çalıştıran cron söz dizimidir. Bir cron ifadesi beş alandan oluşur:

┌───────── dakika (0–59)
│ ┌─────── saat (0–23)
│ │ ┌───── ayın günü (1–31)
│ │ │ ┌─── ay (1–12)
│ │ │ │ ┌─ haftanın günü (0–6, 0 = pazar)
│ │ │ │ │
* * * * *  komut
İfade Anlamı
0 9 * * 1-5 Hafta içi her gün 09:00
*/15 * * * * Her 15 dakikada bir
0 0 1 * * Her ayın 1’i gece yarısı
30 2 * * 0 Her pazar 02:30

Cron, sunucunun yerel saat dilimine göre çalışır. Sunucunuz UTC’deyse “her gün 09:00 Türkiye saati” için 0 6 * * * yazmanız gerekir. İfadeleri oluşturmak ve kontrol etmek için cron ifadesi oluşturucu aracımızı kullanabilirsiniz.

Pratik kullanım örnekleri

  • Token süresi: JWT içindeki exp alanı saniye cinsinden zaman damgasıdır. exp: 1791417600 olan bir token 8 Ekim 2026 03:00 (Türkiye saati) itibarıyla geçersiz olur. Token içeriğini JWT çözücü ile görebilirsiniz.
  • Önbellek ve dosya adları: Derleme sırasında dosya adlarına zaman damgası eklemek, tarayıcının eski dosyayı önbellekten kullanmasını engeller.
  • Süre hesaplama: İki olay arasındaki süre, zaman damgalarının farkıdır: 7.200 saniye = 2 saat.
  • Sıralama: Zaman damgaları sayı olduğu için metin tarihlere göre çok daha hızlı ve güvenilir sıralanır.
  • Geri sayım: Bir kampanyanın bitişine kalan süre, bitiş zaman damgasından şu anki zaman damgasının çıkarılmasıyla bulunur; takvim tarihleri için kaç gün kaldı aracı daha pratiktir.

Sık yapılan hatalar

  • Saniye ve milisaniyeyi karıştırmak: Hane sayısını kontrol edin.
  • Yerel saati zaman damgası sanmak: Zaman damgası her zaman UTC’ye göredir.
  • Cron’un saat dilimini unutmak: Görevler beklenenden 3 saat erken veya geç çalışabilir.
  • 32 bitlik alanlar kullanmak: 2038 sonrası tarihler (ör. 15 yıllık sözleşme bitişleri) bugünden sorun çıkarabilir.
  • İki tarih arasındaki gün farkını 86.400’e bölerek hesaplarken saat dilimini atlamak: Takvim günü hesapları için iki tarih arası gün sayma rehberimize bakın.

Sık sorulan sorular

Unix timestamp neden 1970'ten başlar?

Unix işletim sistemi 1970'lerin başında geliştirildiğinde, yakın ve yuvarlak bir başlangıç noktası olarak 1 Ocak 1970 00:00:00 UTC seçildi. Bu ana 'Unix epoch' denir.

Timestamp 10 haneli mi 13 haneli mi olmalı?

Günümüz tarihleri için saniye cinsinden zaman damgası 10, milisaniye cinsinden 13 hanelidir. JavaScript ve Java genellikle milisaniye, Unix araçları, PHP ve çoğu veritabanı saniye kullanır.

2038 sorunu nedir?

Zamanı işaretli 32 bitlik tam sayı olarak saklayan sistemler 19 Ocak 2038 03:14:07 UTC'den sonraki saniyeyi gösteremez ve değer negatife taşar. 64 bitlik zaman kullanan modern sistemler bu sorundan etkilenmez.

Timestamp saat dilimine göre değişir mi?

Hayır. Aynı an için zaman damgası dünyanın her yerinde aynıdır. Saat dilimi yalnızca bu sayıyı insanların okuyacağı tarihe çevirirken devreye girer.

İlgili rehberler