Daha önce bir veritabanını sorguladıysanız veya modern bir API ile çalıştıysanız, muhtemelen tarihlerin "12 Ekim 2026" olarak değil, 1791800000 gibi devasa, korkutucu bir sayı dizisi olarak döndürüldüğünü görmüşsünüzdür. Bu bir Unix Zaman Damgası'dır ve bilgisayar bilimlerinde zaman işleyişinin evrensel omurgasıdır.
Programlamada tarih ve saatlerin işlenmesi oldukça zordur. Saat dilimleri değişir, yaz saati uygulaması öngörülemeyen bir şekilde başlar ve durur ve artık yıllar fazladan günler getirir. Bu kaotik gerçekliği çözmek için Unix işletim sistemini geliştiren mühendisler kendi mutlak zaman çizelgelerini icat etmeye karar verdiler.
Kökeni: 1 Ocak 1970
Unix Zaman Damgası basitçe 1 Ocak 1970, 00:00:00 UTC'den bu yana geçen saniye sayısıdır. Tarihteki bu tam an "Unix Çağı" olarak biliniyor.
Neden 1970? Çünkü 1970'lerin başında depolama inanılmaz derecede pahalıydı. Bir tarihi "1970-01-01 00:00:00" gibi insan tarafından okunabilen bir dize olarak saklamak, yaklaşık 20 bayt bellek kaplar. Bunu tek bir 32 bitlik tamsayı olarak saklamak yalnızca 4 bayt aldı. Başlangıç noktasını Unix'in icat edildiği zamana yakın yaparak, bu 4 bayt içinde depolayabilecekleri gelecek zaman miktarını maksimuma çıkardılar.
Geliştiriciler Unix Zaman Damgalarını Neden Seviyor?
Unix saatinin API'ler, veritabanları ve mikro hizmetlerde evrensel olarak benimsenmesinin başlıca nedeni, saat diliminin olmamasıdır. Küresel olarak zamanda tek ve mutlak bir anı temsil eder.
Bir etkinliği yerel sunucu saatini ("03:00 PM EST") kullanarak bir veritabanına kaydederseniz ve daha sonra sunucunuzu Londra'ya taşırsanız tüm matematik kesintileriniz olur. Ancak 1700000000 zaman damgasında bir etkinlik meydana gelirse, bu sayı, bunu sorgulayan kullanıcının Tokyo, New York veya Paris'te olup olmadığına bakılmaksızın aynıdır. Ön uç uygulaması basitçe bu tamsayıyı alır ve bunu matematiksel olarak kullanıcının ekranındaki yerel saat dilimine dönüştürür.
Zaman Damgalarını Anında Dönüştürün
Saniyeleri zihinsel olarak hesaplamaya çalışmayın. 10 basamaklı veya 13 basamaklı zaman damgalarını yerel saat diliminizde insanlar tarafından okunabilen tarihlere anında çevirmek için çevrimdışı aracımızı kullanın.
Zaman Damgası Dönüştürücüsünü AçSaniye ve Milisaniye (10 ve 13 Rakam Kuralı)
Web geliştirmede en yaygın hatalardan biri, bir işleve zaman damgası aktarmak ve 1970 yılında veya 52.000 yılında bir tarih almaktır. Bunun nedeni saniyeler ile milisaniyeler arasındaki karışıklıktır.
- Standart Unix Zamanı (Saniye): 10 basamaklı bir sayı (ör.
1700000000). Bu, Linux, PHP ve MySQL gibi çoğu arka uç veritabanındaki standarttır. - JavaScript Süresi (Milisaniye): 13 basamaklı bir sayı (ör.
1700000000000). JavaScript'inDate.now()işlevi, daha yüksek hassasiyet için milisaniyeleri içerir.
10 basamaklı bir arka uç zaman damgasını 1000 ile çarpmadan JavaScript'e eklerseniz, JavaScript, Ocak 1970'in ilk birkaç gününden bahsettiğinizi varsayar.
// Correctly handling a Unix timestamp in JavaScript
const backendTimestamp = 1700000000;
const dateObject = new Date(backendTimestamp * 1000);
console.log(dateObject.toLocaleDateString()); // Converts to local user timezone
2038 Yılı Problemi (Y2K38)
Unix zamanının yaklaşan bir son tarihi var. Başlangıçta imzalı 32 bitlik bir tam sayı olarak saklandığından tutabileceği maksimum sayı 2,147,483,647'dir.
19 Ocak 2038 03:14:07 UTC'de Unix saati bu maksimum sayıya ulaşacak. Bir saniye sonra tamsayı taşacak ve negatif bir sayıya dönüşecek. 64-bit mimariye yükseltilmemiş eski sistemler aniden yılın 1901 olduğuna inanacak ve bu da dünya çapında yazılımlarda yıkıcı arızalara neden olacaktır.
Neyse ki neredeyse tüm modern donanımlar, veritabanları ve programlama dilleri (64 bit Linux çekirdekleri ve modern Node.js gibi) halihazırda 64 bit zamana geçti ve bir sonraki taşmayı milyarlarca yıl geleceğe itti.
Sıkça Sorulan Sorular (SSS)
Unix zamanı artık saniyeleri hesaba katıyor mu?
Şaşırtıcı bir şekilde hayır. Unix zamanı her günün tam olarak 86.400 saniye olduğunu varsayar. Dünya, Dünya'nın dönüşüne uyum sağlamak için bir "sıçrama saniyesi" eklediğinde, Unix sistemleri genellikle matematik hesaplamalarını bozmadan senkronize kalmak için aynı zaman damgasını iki kez tekrarlar.
Unix Zaman Damgası negatif olabilir mi?
Evet. 0'dan küçük herhangi bir zaman damgası, Unix Çağı'ndan (1 Ocak 1970) önceki bir tarihi temsil eder. Örneğin, -86400 tam olarak 31 Aralık 1969'u temsil eder.
Dönüştürülen tarihim neden her zaman 1970 olarak görünüyor?
Muhtemelen 10 basamaklı bir zaman damgasını, 13 basamak (milisaniye) bekleyen bir işleve geçiriyorsunuz. Zaman damganızı dönüştürmeden önce 1000 ile çarpın.