🕐
← Rehberlere dön

Unix Zaman Damgası Nedir? Kapsamlı Kılavuz

· Etiketler: unix-timestamp, epoch, linux-time, 2038-problem, utc, time-conversion

Unix Zaman Damgası Nedir?

Bir Unix zaman damgası (POSIX zamanı veya Epoch zamanı olarak da adlandırılır), artık saniyeler hariç olmak üzere Unix epoch'undan — 1 Ocak 1970 00:00:00 UTC — bu yana geçen saniye sayısını sayan bir zaman takip sistemidir.

Saat dilimine göre değişen insan tarafından okunabilir tarihlerin ("19 Temmuz 2026, 15:30 EST") aksine, bir Unix zaman damgası dünyanın her yerinde aynı anı temsil eden tek bir tamsayıdır. Örneğin, 1785292800 zaman damgası, New York, Londra veya Tokyo'da olmanızdan bağımsız olarak belirli bir ana karşılık gelir.

Unix zaman damgaları, modern bilişimde zaman yönetiminin bel kemiğidir. İşletim sistemleri, programlama dilleri, veritabanları ve dosya sistemlerinin tümü, perde arkasında bu basit tamsayı gösterimine dayanır.

Unix Epoch'u: Neden 1 Ocak 1970?

"Epoch" (başlangıç noktası) olarak 1 Ocak 1970'in seçilmesi keyfi değildi. Bu karara birkaç pratik düşünce yol açtı:

  • Erken Unix geliştirme: Unix işletim sistemi 1960'ların sonu ve 1970'lerin başında Bell Labs'te geliştirildi. Zaman sistemi 1970'lerin başında standartlaştırıldığında, 1 Ocak 1970 temiz ve yakın bir referans noktasıydı.
  • Basitlik: İlk Unix sistemlerinde zaman, saniye sayan 32 bit işaretli bir tamsayı olarak saklanıyordu. Yakın bir tarih kullanmak, geleceğe yönelik temsil edilebilir aralığı maksimize etti.
  • Emsal: Epoch, ilk POSIX standardında resmileştirildi ve Unix türevi sistemler için evrensel referans haline geldi.

Önceki Unix benzeri sistemler farklı epoch tarihleri kullanmıştı, ancak 1970 epoch'u galip geldi ve o zamandan beri tüm POSIX uyumlu sistemler için standart olmuştur.

Zaman Damgası Değeri Nasıl Çalışır?

Temel fikir basittir:

  • 0 zaman damgası tam olarak 1 Ocak 1970 00:00:00 UTC anlamına gelir
  • 86400 zaman damgası (60 x 60 x 24) 2 Ocak 1970 00:00:00 UTC anlamına gelir
  • -3600 zaman damgası 31 Aralık 1969 23:00:00 UTC anlamına gelir (negatif zaman damgaları epoch'tan önceki tarihleri temsil eder)

Formül basittir:

timestamp = 1970-01-01 00:00:00 UTC'den bu yana geçen saniye

Milisaniye Zaman Damgaları

Birçok modern sistem, özellikle JavaScript ve web API'leri, saniye yerine milisaniye kullanır. Bir milisaniye zaman damgası, saniye tabanlı değerin 1000 ile çarpılmasıdır:

  • JavaScript Date.now() milisaniye döndürür
  • Python time.time() kesirli milisaniyelerle birlikte float olarak saniye döndürür

Dönüştürmeden önce her zaman bir sistemin hangi çözünürlüğü kullandığını doğrulayın, çünkü bunları karıştırmak onlarca yıl sapmış tarihler üretebilir.

2038 Yılı Problemi

2038 yılı problemi ("Unix Milenyum Böceği" veya "Y2K38" olarak da adlandırılır), zaman damgalarını 32 bit işaretli tamsayı olarak saklayan sistemleri etkileyecek bir zaman gösterimi sorunudur.

32 bit işaretli bir tamsayı yaklaşık -2,1 milyar ile +2,1 milyar arasındaki değerleri tutabilir. Temsil edilebilir maksimum Unix zaman damgası 2147483647 olup, şuna karşılık gelir:

  • 19 Ocak 2038 03:14:07 UTC

Bir saniye sonra değer -2147483648'e taşar ve bu 13 Aralık 1901'i temsil eder — sistemlerin mevcut zamanı 20. yüzyılın başlarından bir tarih olarak yorumlamasına neden olur.

Hangi Sistemler Etkilenir?

  • 32 bit işlemcili gömülü cihazlar ve IoT donanımları
  • Eski gömülü Linux çekirdekleri
  • 32 bit tamsayı zaman sütunları kullanan eski veritabanları
  • Zamanı 32 bit tamsayı olarak saklayan dosya sistemleri ve ikili biçimler

Çözüm

Modern sistemler büyük ölçüde zaman depolama için 64 bit tamsayılara geçiş yapmıştır. 64 bit işaretli bir tamsayı, yaklaşık 292 milyar yıl sonrasına kadar olan zamanları temsil edebilir — herhangi bir pratik amaç için etkili bir şekilde sonsuzdur.

  • 64 bit donanımdaki çoğu modern Linux dağıtımı zaten güvendedir
  • Linux çekirdeği yıllardır 64 bit sistemlerde 64 bit time_t kullanmaktadır
  • Çekirdek 5.6+, 32 bit mimariler için 64 bit time_t desteği getirdi
  • Python, Go ve Java gibi programlama dilleri dahili olarak 64 bit tamsayı kullanır

Gömülü sistemler veya eski yazılımlar bakımını yapıyorsanız, time_t boyutunuzu kontrol etmek bugün değerli bir egzersizdir.

UTC ve Unix Zaman Damgaları ile İlişkisi

Unix zaman damgaları doğası gereği saat diliminden bağımsızdır — her zaman UTC'ye atıfta bulunurlar.

UTC Nedir?

Eşgüdümlü Evrensel Zaman (UTC), dünyanın saatleri ve zamanı düzenlediği birincil zaman standardıdır. Uluslararası standart olarak Greenwich Ortalama Zamanı'nın (GMT) yerini almıştır ve atomik saatler tarafından korunur.

UTC Unix Zaman Damgaları İçin Neden Önemlidir?

  • Unix zaman damgaları UTC'de tanımlanır, bu nedenle bir zaman damgası küresel olarak aynı anı temsil eder
  • Bir Unix zaman damgasını yerel saate dönüştürmek tamamen bir görüntüleme katmanı endişesidir
  • Zaman damgasının kendisinde saat dilimi bilgisi saklanmaz, bu da sistemi basit ve taşınabilir tutar

Bu tasarım, dünyanın herhangi bir yerindeki biriyle bir Unix zaman damgası paylaşabileceğiniz ve her iki tarafın da belirsizlik olmadan kendi yerel saatine dönüştürebileceği anlamına gelir.

Artık Saniyeler: Nadir İstisna

Unix zaman damgaları teorik olarak epoch'tan bu yana geçen saniyeleri sayar, ancak artık saniyeleri yok sayarlar. Artık saniye eklenen bir gün, Unix zamanında hala tam olarak 86400 saniyeye sahiptir. Bu, bir artık saniye sırasında Unix zaman damgasının ilerlemediği ve artık saniyenin sayımdan etkili bir şekilde kaybolduğu anlamına gelir.

Bu basitleştirme sistemi pratik tutar ancak Unix zaman damgalarının atomik zamandan biraz sapmasına neden olur. Bu fark, günlük uygulamalar için nadiren önem taşıyacak kadar küçüktür.

Yaygın Zaman Damgası Aralıkları

| Zaman Damgası | İnsan Tarafından Okunabilir Tarih | Önemi | |-----------|---------------------|--------------| | 0 | 1970-01-01 00:00:00 UTC | Unix epoch'u | | 86400 | 1970-01-02 00:00:00 UTC | Epoch'tan bir gün sonra | | 946684800 | 2000-01-01 00:00:00 UTC | 2000 yılı | | 1234567890 | 2009-02-13 23:31:30 UTC | Akılda kalıcı bir desen | | 1785292800 | 2026-07-19 00:00:00 UTC | Bugünün epoch'u | | 2147483647 | 2038-01-19 03:14:07 UTC | 32 bit maksimum |

Özet

Bir Unix zaman damgası, zamanı tek bir tamsayı olarak temsil etmenin zarif ve taşınabilir bir yoludur. 1 Ocak 1970 UTC'den itibaren saniyeleri sayan tasarımı, onu işletim sistemleri, veritabanları ve programlama dilleri arasında evrensel zaman standardı haline getirir. 2038 problemi eski sistemler için ufukta görünse de, 64 bit zamana devam eden geçiş, Unix zaman damgasının gelecek nesiller boyunca bilişim zaman tutmanın temel taşı olarak kalmasını sağlar.

Unix zaman damgaları ile çalışmaya hazır mısınız? Zaman damgaları ile insan tarafından okunabilir tarihler arasında anında dönüştürme yapmak için Unix Zaman Damgası Dönüştürücümüzü kullanın.