Rehber

Unix Zaman Damgaları: Kapsamlı Rehber

Unix zaman damgaları, modern bilişimde tarihleri ve zamanları temsil etmenin temel bir yoludur. Veritabanlarından API'lere, sunucu kayıtlarından analitik sistemlere kadar her yerde kullanılırlar. Bu rehber, Unix zaman damgalarının nasıl çalıştığını, bunlarla nasıl çalışacağınızı ve yaygın hatalardan nasıl kaçınacağınızı kapsar.

Unix Zaman Damgası Nedir?

Unix zaman damgası (Unix epoch, Unix time veya POSIX time olarak da bilinir), Unix epoch'tan (1 Ocak 1970, 00:00:00 UTC) bu yana geçen saniye sayısıdır. Tek bir sayı olarak bir zaman noktasını temsil eder, bu da onu depolamak, karşılaştırmak ve iletmek için basit hale getirir. Örneğin, 1609459200 zaman damgası 1 Ocak 2021, 00:00:00 UTC'yi temsil eder. 1640995200, 1 Ocak 2022, 00:00:00 UTC'dir. Zaman damgası arttıkça, zaman ileri gider. Daha küçük sayılar geçmiş tarihleri, daha büyük sayılar gelecekteki tarihleri temsil eder. Neden 1970? Bu, Unix'in yaratıcıları tarafından rastgele seçilen uygun bir dönemdi. Unix işletim sistemi 1960'ların sonunda ve 1970'lerin başında geliştirildi, bu nedenle 1 Ocak 1970, yakın, yuvarlak ve hatırlaması kolay bir tarihti. O zamandan beri, Unix zaman damgaları bilişimin her yerinde evrensel bir zaman temsili standardı haline geldi. Unix zaman damgası her zaman UTC (Koordineli Evrensel Zaman)'dedir. Yerel saat dilimleri yoktur, gün ışığından yararlanma ayarlamaları yoktur, belirsizlik yoktur. Bu evrensellik, onları farklı saat dilimlerindeki sistemler arasında zaman alışverişi yapmak için ideal kılar. Bir sunucu New York'ta, bir diğeri Tokyo'da ve üçüncüsü Londra'da olabilir—hepsi aynı Unix zaman damgalarını kullanır. Unix zaman damgaları genellikle saniye cinsinden depolanır (32 bit veya 64 bit tam sayılar). Ancak, bazı sistemler milisaniye (JavaScript), mikrosaniye veya nanosaniye hassasiyeti kullanır. JavaScript'te, Date.now() 1 Ocak 1970 UTC'den bu yana milisaniye sayısını döndürür. Python'da, time.time() saniye cinsinden kayan nokta döndürür (kesirli saniyeler dahil). 2038 sorunu: 32 bit imzalı tam sayılar, maksimum 2,147,483,647'yi depolayabilir. Bu, 19 Ocak 2038, 03:14:07 UTC'de taşar. 32 bit sistem kullanan eski sistemler bu sorunu yaşayacaktır. Modern sistemler 64 bit tam sayılar kullanır ve milyarlarca yıl boyunca sorun yaşamaz. Yeni kod yazıyorsanız, 64 bit zaman damgaları kullanın.

Zaman Damgalarını Dönüştürme

Unix zaman damgaları ve insan tarafından okunabilir tarihler arasında dönüştürme, çoğu programlama görevinde yaygındır. Her büyük programlama dili, yerleşik fonksiyonlara veya kütüphanelere sahiptir. JavaScript'te: Unix zaman damgasından Date nesnesine: const date = new Date(1609459200 * 1000) (JavaScript milisaniye kullanır, bu yüzden 1000 ile çarpın). Date nesnesinden Unix zaman damgasına: const timestamp = Math.floor(Date.now() / 1000) (milisaniyeyi saniyeye dönüştürmek için 1000'e bölün). İnsan tarafından okunabilir format: date.toISOString() → "2021-01-01T00:00:00.000Z". Yerel saat dilimi: date.toLocaleString() → saat dilimi duyarlı format. Python'da: Unix zaman damgasından datetime'a: from datetime import datetime; dt = datetime.fromtimestamp(1609459200). Datetime'dan Unix zaman damgasına: timestamp = int(dt.timestamp()). Biçimlendirme: dt.strftime("%Y-%m-%d %H:%M:%S"). UTC için: datetime.utcfromtimestamp(1609459200). PHP'de: Unix zaman damgasından DateTime'a: $dt = (new DateTime())->setTimestamp(1609459200). DateTime'dan Unix zaman damgasına: $timestamp = $dt->getTimestamp(). Biçimlendirme: $dt->format('Y-m-d H:i:s'). Zaman dilimi: $dt->setTimezone(new DateTimeZone('Europe/Istanbul')). SQL'de: PostgreSQL: to_timestamp(1609459200) Unix'ten zaman damgasına; extract(epoch from current_timestamp) zaman damgasından Unix'e. MySQL: FROM_UNIXTIME(1609459200) Unix'ten datetime'a; UNIX_TIMESTAMP(NOW()) datetime'dan Unix'e. Saat dilimleri hakkında dikkatli olun. Unix zaman damgaları UTC'dedir. Yerel saat dilimlerine dönüştürürken, uygun UTC offset'ini veya saat dilimi adını belirtin. Saat dilimi bilgisi olmadan, dönüşümler belirsiz veya yanlış olabilir. "Europe/Istanbul", "America/New_York", "Asia/Tokyo" gibi IANA saat dilimi adlarını kullanın. Gün ışığından yararlanma (DST) karmaşıklık ekler. Bazı saat dilimlerinin DST geçişleri vardır—saatler ileri veya geri atlar. Unix zaman damgaları UTC olduğu için DST'den etkilenmez. Ancak, yerel zamanlara dönüştürülürken, saat dilimi kütüphaneleri DST'yi doğru şekilde ele almalıdır. Modern saat dilimi kütüphaneleri (Moment.js, date-fns, Python pytz) DST'yi otomatik olarak işler. ISO 8601 formatı genellikle Unix zaman damgalarına tercih edilir—insan tarafından okunabilir ve saat dilimi bilgisi içerir. ISO 8601: "2021-01-01T00:00:00Z" (UTC) veya "2021-01-01T03:00:00+03:00" (UTC+3). Unix zaman damgaları makineler için, ISO 8601 insanlar ve API'ler için iyidir. Birçok API, hem Unix zaman damgalarını hem de ISO 8601'i kabul eder—hangi biçimin beklediğini kontrol edin.

Zaman Damgaları ile Çalışmak İçin En İyi Uygulamalar

Zaman damgaları ile çalışmak kolay gibi görünür ancak birçok tuzak vardır. Bu en iyi uygulamalar, yaygın hatalardan kaçınmanıza ve güvenilir zaman işlemeye sahip kod yazmanıza yardımcı olur. Her zaman UTC'de saklayın. Yerel zamanları veritabanlarında veya API'lerde asla saklamayın. Yalnızca UTC zaman damgalarını saklayın. Kullanıcı arayüzü için yerel zamana dönüştürün. Bu, saat dilimi karışıklığını, DST sorunlarını ve belirsizliği önler. UTC, zaman depolama için evrensel standarttır. Unix zaman damgalarını veya ISO 8601'i kullanın. Belirsiz tarih formatlarından (MM/DD/YYYY vs DD/MM/YYYY) kaçının. Unix zaman damgaları açıktır (her zaman UTC'de saniye). ISO 8601 açıktır (saat dilimi dahil). Her ikisi de kültürler arası ve programlama dilleri arasında çalışır. Hassasiyete dikkat edin. Saniye hassasiyeti çoğu uygulama için yeterlidir. Milisaniye hassasiyeti, yüksek frekanslı olaylar için (analitik, kayıt kaydı). Mikrosaniye/nanosaniye hassasiyeti, yüksek performanslı sistemler içindir (finansal ticaret, bilimsel hesaplama). Hassasiyet gereksiniminizi bilin—aşırı hassasiyet depolama ve performans maliyetleri ekler. Saat dilimi dönüşümlerini dikkatli yapın. Kullanıcının saat dilimini bildiğinizden emin olun—tarayıcıdan, kullanıcı profilinden veya IP geokonumdan. Doğru saat dilimi kütüphaneleri kullanın—date-fns-tz, Moment Timezone, Python pytz. Saat dilimlerini elle hesaplamaya çalışmayın—DST ve tarihsel değişiklikler karmaşıktır. Tarihleri temsil etmek için zaman damgalarını kullanmayın (saatler olmadan). Unix zaman damgaları zamanın anlarını temsil eder, tarihleri değil. "2021-01-01" (sadece tarih) bir zaman damgası değildir—saat dilimini belirlemeden belirsizdir. Tarih-only değerleri için, DATE türünü (SQL'de) veya "YYYY-MM-DD" string formatını kullanın. Zaman damgalarını tarihlere dönüştürürken, saat dilimi sorunlarına dikkat edin. Geçmiş verilere dikkat edin. Unix zaman damgaları 1 Ocak 1970 öncesi tarihleri temsil edebilir—negatif zaman damgaları. Ancak, bazı sistemler negatif zaman damgalarını desteklemez. 1970 öncesi tarihlere ihtiyacınız varsa, sisteminizin desteklediğini test edin. Tarihsel veriler için, tarih/saat tiplerine (Python datetime, SQL TIMESTAMP) güvenebilir ve Unix zaman damgalarının sınırlamalarını önleyebilir. Artık saniyeler nadirdir ancak mevcuttur. Dünya'nın dönüşü düzenli değildir, bu nedenle artık saniyeler zaman zaman eklenir (23:59:60). Çoğu sistem artık saniyeleri görmezden gelir—Unix zaman damgaları onları takip etmez. Atomik doğruluğa ihtiyacınız yoksa, artık saniyeler konusunda endişelenmeyin. Yaparsanız, özel kütüphaneler kullanın (NTP, TAI). Zaman damgalarını karşılaştırın, dizeler karşılaştırmayın. Tarihleri karşılaştırmak için, zaman damgalarını kullanın: timestamp1 < timestamp2. "2021-01-01" < "2021-12-31" gibi tarihleri string karşılaştırmayın—yalnızca ISO 8601 formatında (YYYY-MM-DD) çalışır. Diğer formatlar (DD/MM/YYYY) yanlış karşılaştırılır. Zaman damgaları her zaman sayısal olarak doğru bir şekilde karşılaştırılır. Sunucu saatlerini senkronize edin. Dağıtık sistemlerde, sunucuların senkronize saatlere sahip olması çok önemlidir. NTP (Ağ Zaman Protokolü) kullanın—sunucu saatlerini küresel saat ile senkronize eder. Senkronize olmayan saatler, tutarsız zaman damgalarına, yarış koşullarına ve veri bozulmasına yol açar. Bulut sağlayıcıları (AWS, Google Cloud, Azure) NTP'yi otomatik olarak yapılandırır. Son olarak, zaman damgalarını güvenlik için kullanmayın. Unix zaman damgaları tahmin edilebilir—her saniye artar. Token'ler veya nonce'lar olarak kullanmayın. Güvenlik için kriptografik olarak güvenli rastgele sayılar kullanın. Zaman damgaları, olay sıralaması, izleme ve kayıt kaydı içindir—kimlik doğrulama veya yetkilendirme için değil.

Aracı Dene

Zaman Damgası Dönüştürücü

Zaman Damgası Dönüştürücü

Daha Fazla Bilgi

SSS

Zaman Damgası Dönüştürücü

SSS