Unix Zamanı 0: Unix Zamanının Başlangıcı
Unix zamanı 0, 1 Ocak 1970 00:00:00 UTC’dir. Her Unix zamanı, bu andan itibaren geçen saniye sayısıdır. Unix zamanı 1 bir saniye sonrasıdır. Unix zamanı 86400 tam olarak bir gün sonrası, 2 Ocak 1970’tir.
# Terminalde doğrulayın
date -d @0 # Linux
date -r 0 # macOS
# Her ikisi de: Thu Jan 1 00:00:00 UTC 1970
Epoch Nasıl Seçildi
Unix, Bell Labs’ta 1969’da geliştirilmeye başlandı. Orijinal PDP-7 uygulaması farklı bir zaman tabanı kullanıyordu. Unix zamanı formatı 1971-1973 arasında Unix PDP-11’e taşınırken stabilize oldu.
1 Ocak 1970 seçimi ilkesel olmaktan çok pragmatikti:
- Geliştirme sırasında geçerli tarihe yakındı ve pozitif Unix zamanlarının kullanışlı aralığını maksimize ediyordu.
- 32 bit sistemde işaretli tamsayı yaklaşık 68 yıllık pozitif değer verir (2^31 saniye ≈ 68.05 yıl). 1970’ten başlayarak bu aralık 2038’e kadar uzanır.
- UTC gece yarısındaki bir takvim tarihi sınırı (1 Ocak), doğal ve net bir başlangıç noktasıydı.
Negatif Unix Zamanları: 1970’ten Önce
-86400 Unix zamanı, 31 Aralık 1969 00:00:00 UTC’dir. Daha geriye gidersek, -2208988800, NTP’nin (Ağ Zaman Protokolü) kullandığı epoch olan 1 Ocak 1900’dür.
Saniye vs Milisaniye: Kalıcı Bir Hata Kaynağı
Unix zamanı saniye cinsinden tanımlanır. Ancak JavaScript’in Date nesnesi (ve tarayıcı API’lerinin çoğu) milisaniye kullanır:
Date.now() // epoch'tan bu yana milisaniye, örn. 1700000000000
Math.floor(Date.now() / 1000) // saniyeye dönüştür: 1700000000
Kanonik hata: bir veritabanından saniye cinsinden bir Unix zamanı okur, doğrudan new Date()’e 1000 ile çarpmadan geçirir ve 2023 yerine Ocak 1970’te bir tarih alırsınız.
Farklı Sistemler Aynı Anı Nasıl Temsil Eder
1 Ocak 2024 00:00:00 UTC anı:
| Sistem | Temsil | Notlar |
|---|---|---|
| Unix (saniye) | 1704067200 | Standart C/POSIX |
| Unix (milisaniye) | 1704067200000 | JavaScript, Java |
| Windows FILETIME | 133491648000000000 | 1601’den beri 100 ns |
| Excel seri | 45292 | 1900’den beri günler |
Artık Saniyeler ve Unix’in Onları Neden Yok Saydığı
UTC periyodik olarak atom saati ile Dünya’nın dönüşünü hizalamak için artık saniyeler ekler. 1972’den beri 27 artık saniye eklenmiştir. Unix zamanı bunu yok sayar: her günü tam olarak 86400 saniye olarak tanımlar. Pratik etkisi, Unix zamanlarının artık saniye içeren tarihler için UTC ile monoton olarak tutarlı olmamasıdır.
Pratikte Unix Zamanlarını Okuma
Günlük dosyasında veya veritabanında şüpheli bir sayı gördüğünüzde:
~10 basamak: Unix saniye (örn. 1700000000 → Kas 2023)
~13 basamak: Unix milisaniye (örn. 1700000000000 → Kas 2023)
~16 basamak: Unix mikrosaniye
~18 basamak: Windows FILETIME