Unix Zaman Damgası Nedir?
Unix zaman damgası (epoch zamanı ya da POSIX zamanı olarak da bilinir), 1 Ocak 1970 günü saat 00:00:00 UTC'den itibaren geçen saniye sayısıdır; artık saniyeler bu sayıma dahil edilmez. Bilgisayarların bir zaman anını saat dilimlerinden ve takvim biçimlerinden bağımsız olarak saklamasının evrensel yöntemidir. Bu hesaplayıcı, çoğu programlama dilinin döndürdüğü birim olan milisaniye cinsinden bir zaman damgasını (örneğin JavaScript'teki Date.now()) alır ve epoch'tan bu yana geçen saniye, dakika ve güne çevirir.
Nasıl Kullanılır?
Milisaniye cinsinden Unix zamanınızı alana yazın ve gönderin. Araç, değeri 1000'e tam bölme (floor) yaparak tam Unix saniyesini verir — veritabanlarında, API'lerde ve Linux'un date +%s komutunda en sık kullanılan biçim budur. Sonuç tablosu ayrıca orijinal milisaniye değerini, geçen dakika ve gün sayısını gösterir; böylece sonucu hızlıca kontrol edebilirsiniz.
Formülün Açıklaması
Temel dönüşüm şudur:
$$\text{Seconds} = \left\lfloor \frac{\text{Time (ms)}}{1000} \right\rfloor$$1000'e bölmek milisaniyeyi saniyeye çevirir, floor işlemi ise ondalık kısmı atarak tam saniyelik bir zaman damgası verir. Dakika için \(\left\lfloor \frac{\text{now\_ms}}{60000} \right\rfloor\), gün için ise \(\left\lfloor \frac{\text{now\_ms}}{86400000} \right\rfloor\) kullanılır; çünkü bir gün 86.400 saniye = 86.400.000 milisaniyedir.
$$\begin{gathered} \text{Seconds} = \left\lfloor \dfrac{M}{1000} \right\rfloor, \quad \text{Millis} = M \\[1em] \text{Minutes} = \left\lfloor \dfrac{M}{60000} \right\rfloor, \quad \text{Days} = \left\lfloor \dfrac{M}{86400000} \right\rfloor \\[1.5em] \text{where}\quad M = \text{Time (ms)} \end{gathered}$$
Çözümlü Örnek
Diyelim ki \(\text{now\_ms} = 1\,700\,000\,000\,000\). Bu durumda
$$\text{epoch\_s} = \left\lfloor \frac{1\,700\,000\,000\,000}{1000} \right\rfloor = 1\,700\,000\,000 \text{ saniye}$$olur ve bu da 14 Kasım 2023 tarihine karşılık gelir. Epoch'tan bu yana geçen dakika = \(\left\lfloor \frac{1\,700\,000\,000\,000}{60000} \right\rfloor = 28\,333\,333\), gün ise = \(\left\lfloor \frac{1\,700\,000\,000\,000}{86\,400\,000} \right\rfloor = 19\,675\)'tir.
Sıkça Sorulan Sorular
Neden her yerde milisaniye yerine saniye kullanılıyor? Eski sistemler ve birçok API (Unix, Postgres, JWT'deki exp alanı) saniyeyi saklarken, tarayıcılar ve Java milisaniyeyi kullanır. İkisi arasında geçiş yapmak için sadece 1000 ile çarpmak ya da bölmek yeterlidir.
Peki artık saniyeler ne olacak? Unix zamanı artık saniyeleri yok sayar, dolayısıyla sayım temiz ve doğrusal bir ölçüdür — aritmetik için pratiktir ama astronomik UTC ile tam olarak hizalanmaz.
2038'de bir sorun çıkacak mı? Saniye sayısını işaretli 32 bit tam sayıda saklayan sistemler 19 Ocak 2038'de taşmaya uğrar. Modern 64 bit sistemler bundan etkilenmez.