Log dosyalarında, API yanıtlarında, veritabanı kayıtlarında ve JWT token’larında karşılaşılan 1791417600 gibi uzun sayılar, büyük olasılıkla Unix zaman damgasıdır. Bu yöntem bilgisayarların zamanı saklamasının en sade yoludur: saat dilimi, yaz saati veya tarih biçimi karmaşası yoktur, yalnızca bir sayı vardır. Bu rehberde Unix zamanının mantığını, saniye ile milisaniye farkını, Türkiye saatiyle dönüşümü ve 2038 sorununu anlatıyoruz. Bir zaman damgasını tarihe çevirmek için Unix zaman dönüştürücü aracımızı kullanabilirsiniz.
Unix zamanı nedir?
Unix zamanı (epoch time, POSIX time), 1 Ocak 1970 00:00:00 UTC’den bu yana geçen saniye sayısıdır.
| Zaman damgası | UTC tarih | Türkiye saati (UTC+3) |
|---|---|---|
0 |
1 Ocak 1970 00:00:00 | 1 Ocak 1970 02:00:00* |
1791417600 |
8 Ekim 2026 00:00:00 | 8 Ekim 2026 03:00:00 |
1800000000 |
15 Ocak 2027 08:00:00 | 15 Ocak 2027 11:00:00 |
2147483647 |
19 Ocak 2038 03:14:07 | 19 Ocak 2038 06:14:07 |
* Türkiye 1970’te UTC+2 kullanıyordu; geçmiş tarihlerin yerel saate çevrilmesinde saat dilimi veritabanı (IANA) bu değişiklikleri dikkate alır.
Önemli özellikler:
- Saat diliminden bağımsızdır: Aynı an İstanbul’da da New York’ta da aynı sayıdır.
- Artık saniyeleri saymaz: Her gün tam 86.400 saniye kabul edilir.
- Negatif olabilir: 1970 öncesi tarihler negatif sayılarla gösterilir.
- Sıralama ve fark hesaplama kolaydır: İki zaman damgasının farkı doğrudan saniye cinsinden süreyi verir.
Saniye mi milisaniye mi?
En sık yapılan hata, saniye ve milisaniye cinsinden zaman damgalarını karıştırmaktır.
| Birim | Hane sayısı (günümüz) | Kullananlar |
|---|---|---|
| Saniye | 10 | Unix/Linux, PHP, Python time.time() (ondalıklı), MySQL UNIX_TIMESTAMP(), JWT exp ve iat |
| Milisaniye | 13 | JavaScript Date.now(), Java System.currentTimeMillis() |
| Mikrosaniye / nanosaniye | 16 / 19 | Bazı veritabanları, Go, yüksek çözünürlüklü loglar |
Saniye cinsinden bir değeri milisaniye bekleyen JavaScript’e verirseniz tarih 1970’in ocak ayına düşer; tersi durumda ise binlerce yıl sonrasına gider. Kural basit: 10 hane saniye, 13 hane milisaniye.
Farklı dillerde dönüşüm
// JavaScript
Math.floor(Date.now() / 1000); // şu anki zaman (saniye)
new Date(1791417600 * 1000).toISOString(); // '2026-10-08T00:00:00.000Z'
new Date(1791417600 * 1000).toLocaleString('tr-TR', { timeZone: 'Europe/Istanbul' });
# Python
import time, datetime
int(time.time())
datetime.datetime.fromtimestamp(1791417600, tz=datetime.timezone.utc)
# Linux / macOS
date +%s # şu anki zaman
date -u -d @1791417600 # GNU (Linux)
date -u -r 1791417600 # BSD (macOS)
-- MySQL
SELECT FROM_UNIXTIME(1791417600);
-- PostgreSQL
SELECT to_timestamp(1791417600);
Saat dilimleri ve Türkiye
Türkiye 2016’dan beri yıl boyu UTC+3 kullandığı için güncel tarihlerde dönüşüm basittir: UTC saatine 3 saat eklenir. Ancak:
- Sunucunun saat dilimi ayarı (
TZ) yerel tarihe çevirmede kullanılır; bulut sunucuları genellikle UTC’dedir. - Veritabanında UTC saklayıp yalnızca gösterimde yerel saate çevirmek en güvenli yöntemdir.
- Yurt dışı kullanıcılarınız varsa her kullanıcının kendi saat dilimini dikkate alın.
Saat dilimleri ve yaz saati kuralları için saat dilimleri rehberimize bakabilirsiniz.
2038 sorunu
Zamanı işaretli 32 bitlik tam sayı olarak saklayan sistemlerde en büyük değer 2.147.483.647’dir. Bu sayı 19 Ocak 2038 03:14:07 UTC’ye (Türkiye saatiyle 06:14:07) karşılık gelir. Bir saniye sonra değer taşar ve negatife döner; sistem tarihi 1901 yılı olarak yorumlayabilir.
Etkilenebilecekler:
- Eski gömülü sistemler, endüstriyel cihazlar, bazı IoT donanımları
- 32 bitlik
time_tkullanan eski yazılımlar - Veritabanlarında 32 bitlik tam sayı sütunlarında saklanan zaman damgaları (örneğin MySQL’in
TIMESTAMPtipi tarihsel olarak 2038 ile sınırlıdır)
Modern 64 bitlik sistemler milyarlarca yıl sonrasını gösterebilir. Yeni projelerde zaman damgalarını 64 bitlik (BIGINT) alanlarda saklamak yeterli önlemdir.
Cron ifadeleri: zamanlanmış görevler
Zaman damgasıyla yakından ilişkili bir başka konu, sunucularda görevleri belirli zamanlarda çalıştıran cron söz dizimidir. Bir cron ifadesi beş alandan oluşur:
┌───────── dakika (0–59)
│ ┌─────── saat (0–23)
│ │ ┌───── ayın günü (1–31)
│ │ │ ┌─── ay (1–12)
│ │ │ │ ┌─ haftanın günü (0–6, 0 = pazar)
│ │ │ │ │
* * * * * komut
| İfade | Anlamı |
|---|---|
0 9 * * 1-5 |
Hafta içi her gün 09:00 |
*/15 * * * * |
Her 15 dakikada bir |
0 0 1 * * |
Her ayın 1’i gece yarısı |
30 2 * * 0 |
Her pazar 02:30 |
Cron, sunucunun yerel saat dilimine göre çalışır. Sunucunuz UTC’deyse “her gün 09:00 Türkiye saati” için 0 6 * * * yazmanız gerekir. İfadeleri oluşturmak ve kontrol etmek için cron ifadesi oluşturucu aracımızı kullanabilirsiniz.
Pratik kullanım örnekleri
- Token süresi: JWT içindeki
expalanı saniye cinsinden zaman damgasıdır.exp: 1791417600olan bir token 8 Ekim 2026 03:00 (Türkiye saati) itibarıyla geçersiz olur. Token içeriğini JWT çözücü ile görebilirsiniz. - Önbellek ve dosya adları: Derleme sırasında dosya adlarına zaman damgası eklemek, tarayıcının eski dosyayı önbellekten kullanmasını engeller.
- Süre hesaplama: İki olay arasındaki süre, zaman damgalarının farkıdır: 7.200 saniye = 2 saat.
- Sıralama: Zaman damgaları sayı olduğu için metin tarihlere göre çok daha hızlı ve güvenilir sıralanır.
- Geri sayım: Bir kampanyanın bitişine kalan süre, bitiş zaman damgasından şu anki zaman damgasının çıkarılmasıyla bulunur; takvim tarihleri için kaç gün kaldı aracı daha pratiktir.
Sık yapılan hatalar
- Saniye ve milisaniyeyi karıştırmak: Hane sayısını kontrol edin.
- Yerel saati zaman damgası sanmak: Zaman damgası her zaman UTC’ye göredir.
- Cron’un saat dilimini unutmak: Görevler beklenenden 3 saat erken veya geç çalışabilir.
- 32 bitlik alanlar kullanmak: 2038 sonrası tarihler (ör. 15 yıllık sözleşme bitişleri) bugünden sorun çıkarabilir.
- İki tarih arasındaki gün farkını 86.400’e bölerek hesaplarken saat dilimini atlamak: Takvim günü hesapları için iki tarih arası gün sayma rehberimize bakın.