4 dk okumaGüncellendi

Unix zaman damgaları: artık saniyeler, 2038 ve iş mili tuzakları

Yazar: Safe Local Tools Editör

Unix zaman damgası, üç karışıklığı gizleyen yanıltıcı derecede basit bir tam sayıdır: sivil takvimler, saat dilimi politikası ve donanım sözcük genişliği. Bunu, dünya senkronizasyonu sırasındaki UTC anlık durumu olarak düşünün; ancak yaz saati uygulaması olan birçok yerde yerel saatlerin yılda iki kez atladığını unutmayın. Mühendisler, '1970-01-01T00:00:00Z'den bu yana saniyeleri saklamayı severler çünkü bu, iyi bir şekilde sıralar ve süre ekler; ta ki bulma, artık saniye, tarihsel sapmalar veya 2038'de 'int32' taşması görünene kadar. Ve Safe Local Tools ile tarayıcıda yerel olarak dönüştürme, dahili kimlikleri opak SaaS dönüştürücülere yapıştırmadan günlüklerde hata ayıklamanıza yardımcı olur.

OG illustration

Unix zamanı çoğu insanın kullandığı şekilde

Genel olarak, UTC'deki Unix çağından bu yana artık olmayan saniyeleri sayar; tzdata kitaplıkları, DST ilkesi kurallarını kodlayan IANA tabanlı okunabilir alanlarla eşleşir.

Tarihsel referans olarak, Unix zamanı ve artık saniye ile ilgili makaleler tartışmaları özetlemektedir - operasyonel çıkarım: sensör semantiğini bilmeden sadece tam sayılara bakarak laboratuvar kronolojisi sonucunu çıkarmayın.

Artık saniyeler ve yüksek hassasiyetli zamanlayıcılar

Dünyanın dönüşü salınımlıdır; UTC bazen artık saniyeyi ekler. Yığınlar, zaman damgalarının "gömülü", tekrarlı veya atlı olup olmadığı konusunda fikir ayrılığına düştü; POSIX, uygulamalar arasında belirsizliği yayar. Boru hatlı normalizasyondan sonraki log korelasyonu için dönem genellikle yeterince monotondur; Gecikmeyi ölçmek için duvar saati dönüşümünü değil, monotonik saati ("performans.şimdi") kullanın.

Yıl 2038 ve JavaScript'te IEEE hassasiyeti

2038‑01‑19 yakınında "time_t" 32 bit imzalı taşmalar. 64 bit tamsayıları veya ISO‑8601 dizelerini açık dengelemeyle kalıcı hale getirerek azaltın; Node hizmetiniz 64 bit olsa bile ürün yazılımını ve eski sütunları denetleyin.

ECMAScript sayıları IEEE'nin iki katıdır; bugüne yakın ms'ler için sorun yoktur; aşırı ölçekler 'BigInt'e ihtiyaç duyabilir. Klasik uyarı: Toplamalarda kafa karıştırıcı saniyeler ve milisaniyeler; şema doğrulamayla besleme sırasında normalleştirme.

const ms = Number("2147483647000");
console.log(new Date(ms).toISOString());

JWT exp, çerezler ve NTP

JWT'nin 'exp'si saniye cinsinden 'NumericDate'tir; Doğrulayıcılar bunu, konteyner anlık görüntüden uyandığında sürüklenmeye maruz kalan duvar saatinin "şimdi"siyle karşılaştırır; onlarca saniyelik tolerans bantlarının bir nedeni vardır.

'Max-Age' ve 'Expires' ile CDN yeniden yazımını karıştıran çerezler sizi şaşırtabilir; tarayıcı tarafından görülen son başlığı inceleyin. NTP olaylarından sonra, dedektörlerin hayali SLO ihlalleri üretmemesi için gözlemlenebilirlik platformlarındaki manuel düzeltmelere dikkat edin.

Zaman dilimleri siyasettir; DST yerel saati iki katına çıkarır

Siyasi organlar çok az uyarıda bulunarak kuralları değiştiriyor; ikili dosyaların tzdata'yı güncellemesi gerekiyor. Klasik hata: Yerel bileşenlerin ofset olmadan yazılması (yay boşluğunda "2026-03-10 02:30") ve belirsiz bir şekilde seri durumdan çıkarma.

Sonbaharda yerel saat tekrarlanır; adli tıpta ilk olayı ikinciden ayırmanın bir yolu yoktur. Denetim önemli olduğunda işlem hatları, yerelleştirilmiş dizeyle birlikte UTC dönemini yaymalıdır.

'Date.parse' için ücretsiz dizeler geçmişte tarayıcılar arasında farklılık gösteriyordu; borsa ISO'yu tercih etmelidir (YYYY-AA-GGTHH:mm:ss.sssZ).

{
  "loggedAt": "2026-05-09T15:30:00.000Z",
  "ttlSeconds": 3600
}

Safe Local Tools veritabanı, takvim, süre ve kullanım karşılaştırması

ZAMAN DİLİMİ OLMAYAN ZAMAN DAMGASI, motor oturum zaman dilimini yeniden yorumlarken analistleri "yerel saatten" tasarruf ettiklerini düşünmeye davet ediyor - demoda harika, çok uluslu değişmez parçada berbat. Altın kural: Anları UTC'de ("zaman damgası"/ISO) sürdürün ve yalnızca kullanıcı arayüzü katmanında yerel olarak işleyin.

"Gelecek ay aynı yerel saat" gibi iş kuralları, saniyelerin sabit bir katını değil, düzensiz bir takvimi takip eder; tamamen dönemsel TTL ile karıştırmak, çift faturalandırmaya veya abonelikte bir boşluk oluşmasına neden olur.

Olay müdahale ekipleri günlük dönemlerini web dönüştürücülere yapıştırır; Bu, ilişkilendirilebilir kimliklerin sızıntı yüzeyini genişletir. Safe Local Tools, istemcideki zaman damgasını hassas hata ayıklama doğrultusunda dönüştürür ancak daha sonra yetkili izlemeyle doğrular.

Taşıma: 32 bitlik sütunların envanterini çıkarın, "_ms" ve "_s" son eklerini standartlaştırın, denetim izleri için ISO UTC'yi ve analitik birleştirmeler için sayısal dönemi yayınlayın. DST geçişlerine yakın özellik testleri, aylarca süren çağrıdan tasarruf sağlar.

Finans tarafından ihraç edilen e-tablolar genellikle denkleştirmeleri bırakır ve belirsiz yerel dizeleri korur; doğrulayıcıların "Z" olmadan veya mahsup olmadan zaman damgalarını reddetmemesi durumunda "düzeltilmiş" CSV'nin depoya yeniden alınması, mali üç aylık dönemler arasındaki olayları değiştirir. Olaylar sırasında, kontrol panelleri birleşene kadar dönemi aynı anda ms ve ISO UTC cinsinden kaydedin; Bu, Kibana ile Snowflake arasındaki ilk anlaşmazlık sırasında nöbetçi kahvenin parasını ödüyor.

Gömülü sensörler bazen satıcı çağlarından sayılır; Unix ile ilişkilendirilmeden önce belge dönüşümü. JavaScript ekosisteminde bile "Date" ile nano bigint'in karıştırılması, dağıtılmış izlerdeki sessiz hassasiyetin kaybolmasını önlemek için açık sınırlar gerektirir.

"Zaman Damgası yalnızca sayıdır" demek, tarih politikası çıktığında hızlı şekilde yanıltır; bu yüzden olay günlüklerinin hem POSIX saniye/milisaniye hem de insanın gördüğü ISO UTC çıktılarını paralel yayınlamak geçiş hatalarında panoyu rahatlatır. Depoda WITHOUT TIME ZONE kolonların oturumu bağımlı olarak tekrar yorumladığını fark etmeyen gösterge panelleri aynı anda iki gerçeklik iddia edebilir — sonuçta tutarlılık için tek anlık kaynak UTC’dir. Dahili zaman damgasını veya SLA sayaçlarını garip SaaS’a taşımak istemediğinizde Unix zaman damgası dönüştürücüyü deneyin →