Unix Zaman Damgaları Hakkında
Unix zaman damgası (Epoch zamanı veya POSIX zamanı olarak da bilinir), zamanı çalışan saniye sayısı olarak izleyen bir sistemdir. Zamanı, Unix Epoch'tan bu yana geçen saniye sayısıyla ölçer: 1 Ocak 1970 Perşembe günü, 00:00:00 UTC, artık saniyeler hariç.
Neden Unix Zaman Damgaları Kullanmalısınız?
Unix zaman damgaları programlamada ve bilişimde yaygın olarak kullanılır çünkü:
- Evrensel: Saat dilimlerinden ve yerel ayarlardan bağımsız
- Basit: Bir zaman noktasını temsil eden tek bir tamsayı
- Sıralanabilir: Kronolojik sıra sayısal sırayla eşleşir
- Kompakt: Dize tarihlerine kıyasla verimli depolama
- Hesaplanabilir: Tarih aritmetiği yapmak kolay
- Standartlaştırılmış: Tüm programlama dilleri ve platformlarda kullanılır
Saniye ve Milisaniye
Saniye Cinsinden Unix Zaman Damgası
Standart Unix zaman damgası saniye kullanır. Saniye cinsinden bir zaman damgası genellikle 10 basamaklıdır (2286 yılına kadar). Örneğin: 1609459200, 1 Ocak 2021'i temsil eder.
Milisaniye Cinsinden Unix Zaman Damgası
JavaScript ve diğer bazı diller daha yüksek hassasiyet için milisaniye kullanır. Milisaniye cinsinden bir zaman damgası genellikle 13 basamaklıdır. Örneğin: 1609459200000 aynı tarihi milisaniye hassasiyetiyle temsil eder.
Dönüşüm: Milisaniye elde etmek için saniyeleri 1.000 ile çarpın veya saniye elde etmek için milisaniyeleri 1.000'e bölün.
Yaygın Tarih Formatları
ISO 8601
Uluslararası standart format: YYYY-MM-DDTHH:mm:ss.sssZ
Örnek: 2021-01-01T00:00:00.000Z
"Z", UTC'yi (Zulu saat dilimi) gösterir.
RFC 2822
E-posta ve HTTP başlık formatı: Day, DD Mon YYYY HH:mm:ss TZ
Örnek: Fri, 01 Jan 2021 00:00:00 GMT
UTC (Koordineli Evrensel Saat)
UTC saat diliminde zamanı gösteren insan tarafından okunabilir format.
Örnek: Fri, 01 Jan 2021 00:00:00 GMT
Yerel Tarih/Saat
Tarihi ve saati kullanıcının sistem yerel ayarlarına ve saat dilimi ayarlarına göre görüntüler.
Tarihteki Önemli Zaman Damgaları
- 0 - Unix Epoch (1 Ocak 1970, 00:00:00 UTC)
- 946684800 - Y2K (1 Ocak 2000, 00:00:00 UTC)
- 1000000000 - 1 milyar saniye (9 Eylül 2001)
- 1234567890 - 13 Şubat 2009, 23:31:30 UTC
- 2147483647 - 2038 Yılı Sorunu (maksimum 32-bit işaretli tamsayı)
2038 Yılı Sorunu
19 Ocak 2038'de, saat 03:14:07 UTC'de, 32-bit sistemler Y2K sorununa benzer bir tamsayı taşması ile karşılaşacak. Zaman damgası 2.147.483.647'ye (32-bit işaretli tamsayı için maksimum değer) ulaşacak ve negatif değerlere dönecek. Modern 64-bit sistemler bu sorundan etkilenmez.
Saat Dilimleri ve UTC
Unix zaman damgaları her zaman UTC zamanını temsil eder. Zaman damgaları kullanıcılara görüntülenirken genellikle yerel saat dilimine dönüştürülür. Bu nedenle aynı zaman damgası, dünyanın neresinde olduğunuza bağlı olarak farklı yerel saatler gösterebilir.
Örneğin, 1609459200 zaman damgası şunu temsil eder:
- UTC'de 1 Ocak 2021, 00:00:00
- EST'de (UTC-5) 31 Aralık 2020, 19:00:00
- CET'de (UTC+1) 1 Ocak 2021, 01:00:00
Kullanım Alanları
- Veritabanları: Tarihleri saat diliminden bağımsız bir formatta saklama
- API'ler: Sistemler arasında tarih/saat bilgisi alışverişi
- Günlükleme: Olayların ne zaman gerçekleştiğini kaydetme
- Önbellekleme: Süre sonu zamanlarını ayarlama
- Kimlik Doğrulama: Token süresi dolumu, oturum yönetimi
- Zamanlama: Cron işleri, görev zamanlama
- Analitik: Zaman serisi veri analizi
Programlama Örnekleri
JavaScript
// Get current timestamp in seconds
Math.floor(Date.now() / 1000)
// Get current timestamp in milliseconds
Date.now()
// Convert timestamp to Date object
new Date(1609459200 * 1000)
// Convert Date to timestamp
Math.floor(new Date().getTime() / 1000)Python
import time
from datetime import datetime
# Get current timestamp
int(time.time())
# Convert timestamp to datetime
datetime.fromtimestamp(1609459200)
# Convert datetime to timestamp
int(datetime.now().timestamp())PHP
// Get current timestamp
time()
// Convert timestamp to date
date('Y-m-d H:i:s', 1609459200)
// Convert date to timestamp
strtotime('2021-01-01 00:00:00')En İyi Uygulamalar
- Tutarlılık için tarihleri her zaman veritabanlarında Unix zaman damgaları olarak saklayın
- Yalnızca kullanıcılara gösterirken insan tarafından okunabilir formata dönüştürün
- Tüm sunucu tarafı işlemler için UTC kullanın
- Yalnızca istemci tarafında yerel saat dilimlerine dönüştürün
- Dilinizde/çerçevenizde saniye ile milisaniye farkına dikkat edin
- 2038 Yılı Sorununu önlemek için 64-bit tamsayılar kullanmayı düşünün
- API'nizin hangi birimi (saniye veya milisaniye) kullandığını belgelendirin