Unix zaman damgası dönüştürücü nasıl kullanılır?
- Bir Unix zaman damgası yapıştırın. Dönüştürücü, değerin saniye mi yoksa milisaniye mi olduğunu kendisi anlar.
- Tarihi UTC olarak, yerel saat diliminizde ve ISO 8601 biçiminde okuyun.
- Ters yönde dönüştürmek için bir tarih ve saat seçin, ortaya çıkan zaman damgasını kopyalayın.
Dönüşümler, cihazınızın saati ve saat dilimi ayarları kullanılarak tarayıcınızda hesaplanır; hiçbir şey sunucuya gönderilmez ya da sunucuda saklanmaz.
Unix zaman damgası nedir?
Unix zaman damgası (epoch time ya da POSIX zamanı olarak da bilinir), Unix epoch'u olan 1970-01-01T00:00:00Z anından, yani 1 Ocak 1970 UTC gece yarısından bu yana geçen saniye sayısıdır. Epoch'tan önceki tarihler negatif sayılardır.
Zaman damgaları çok kullanılır, çünkü tek bir tam sayıdan oluşur; saat dilimlerinden ve yaz saati uygulamasından bağımsızdır, karşılaştırması ve sıralaması kolaydır, saklaması da az yer kaplar. Yerel saate dönüştürme yalnızca gösterimle ilgilidir ve en son aşamada yapılır.
1700000000 → 2023-11-14T22:13:20Z
0 → 1970-01-01T00:00:00Z
-86400 → 1969-12-31T00:00:00Z
Saniye mi, milisaniye mi?
Unix araçları, PHP, Python'ın time.time() fonksiyonu ve çoğu veritabanı saniye kullanır. JavaScript'in Date.now(), Java'nın System.currentTimeMillis() fonksiyonları ve birçok JSON API'si milisaniye kullanır. Günümüz tarihleri için saniye cinsinden bir değer 10 haneli, milisaniye cinsinden bir değer 13 hanelidir. İkisini karıştırmak, zaman damgalarıyla ilgili en yaygın hatadır:
new Date(1700000000) // Tue Jan 20 1970 (ms olarak yorumlanır!)
new Date(1700000000 * 1000) // Tue Nov 14 2023
Artık saniyeler yok sayılır
Unix zamanı her günün tam olarak 86.400 saniye olduğunu varsayar. UTC'ye bir artık saniye eklendiğinde Unix zamanı onu saymaz; bu yüzden zaman damgası, 1970'ten bu yana geçen gerçek SI saniyesi sayısına eşit değildir. Uygulamaların neredeyse tamamı için bu önemsizdir ve tarih hesaplamalarını basit tutar.
Sık yapılan hatalar
2038 yılı problemi
Zaman damgalarını işaretli 32 bitlik tam sayı olarak saklayan sistemler en fazla 2.147.483.647'ye kadar sayabilir; bu da 2038-01-19T03:14:07Z anına denk gelir. Bir saniye sonra değer taşar ve Aralık 1901'deki bir tarihi temsil eden negatif bir sayıya döner. Modern işletim sistemleri ve diller 64 bitlik zaman kullanır, ancak gömülü cihazlar, eski dosya biçimleri ve 32 bitlik tam sayı olarak tanımlanmış veritabanı sütunları risk altında kalmaya devam eder. Gelecekteki tarihleri saklayabilecek her şey için 64 bitlik tam sayılar ya da yerel tarih/saat türleri kullanın.
Fark edilmeden araya giren yerel saat
2024-03-10 02:30 gibi saat dilimi içermeyen bir tarih dizesini ayrıştırmak makinenin yerel saat dilimini kullanır; bu da farklı sunucularda farklı zaman damgaları ya da yaz saati geçişi sırasında geçersiz bir saat üretebilir. Her zaman bir saat farkı (offset) ya da Z ekleyin.
ISO 8601
İnsanların okuyabileceği veri alışverişi için standart, ISO 8601'dir (ve onun internet profili RFC 3339): 2023-11-14T22:13:20Z ya da 2023-11-14T23:13:20+01:00. Zaman damgaları gibi, UTC'deki ISO 8601 dizeleri de düz metin olarak doğru sıralanır.
Kodda güncel zaman damgası nasıl alınır?
| Ortam | Epoch'tan bu yana geçen saniye |
|---|---|
| Kabuk (Linux, macOS) | date +%s |
| Python | import time; int(time.time()) |
| JavaScript | Math.floor(Date.now() / 1000) |
| PHP | time() |
| MySQL | SELECT UNIX_TIMESTAMP(); |
| PostgreSQL | SELECT EXTRACT(EPOCH FROM now()); |
Komut satırında bir zaman damgasını tarihe geri dönüştürmek için Linux'ta (GNU date) date -u -d @1700000000, macOS'te date -u -r 1700000000 komutunu kullanın.
exp, iat ve nbf değerlerini saniye cinsinden Unix zaman damgası olarak saklar. JWT çözücü bunları sizin için dönüştürür. Milisaniye cinsinden zaman damgası içeren, zamana göre sıralı tanımlayıcılar için UUID v7 oluşturucuya bakın.Sık sorulan sorular
Unix zaman damgası her saat diliminde aynı mıdır?
Evet. UTC'deki sabit bir andan bu yana geçen saniyeleri sayar; bu yüzden herhangi bir anda her yerde aynıdır. Yalnızca yerel saate dönüştürülmüş hâli farklıdır.
Saniyeyi milisaniyeden nasıl ayırt ederim?
Haneleri sayın. Güncel tarihler saniye cinsinden 10, milisaniye cinsinden 13 hanelidir. Ocak 1970'e ait bir "tarih" görüyorsanız genellikle saniye değeri milisaniye olarak okunmuştur; on binlerce yıl sonrasına ait bir tarih ise bunun tersi demektir.
2038'de ne olacak?
Yalnızca zamanı işaretli 32 bitlik bir tam sayıda saklayan yazılımlar bozulur. 64 bitlik zaman damgaları milyarlarca yıl boyunca taşmayacaktır.
Unix zaman damgası negatif olabilir mi?
Evet. Negatif değerler 1 Ocak 1970'ten önceki anları temsil eder, ancak bazı eski sistemler ve API'ler bunları kabul etmez.
Güncellendi