Epoch Time Tam Olarak Nedir?
Programlamada tarih ve saatlerle çalıştıysan, muhtemelen Unix zaman damgalarıyla karşılaşmışsındır. Ama bunlar gerçekte ne ve neden kullanıyoruz?
Unix epoch zamanı (Unix zamanı, POSIX zamanı veya basitçe "epoch" olarak da bilinir), belirli bir anı 1 Ocak 1970 gece yarısı UTC'den (Evrensel Eşgüdümlü Zaman) bu yana geçen saniye sayısı olarak temsil eder. Bu belirli an "Unix epoch" veya "epoch sıfır" olarak bilinir.
Neden 1 Ocak 1970?
Bu tarih keyfi görünebilir, ancak 1970'lerin başında Bell Labs'ta Unix geliştirilirken seçildi. Geliştiricilerin zaman takip sistemi için tutarlı bir başlangıç noktasına ihtiyaçları vardı ve 1 Ocak 1970, proje üzerinde çalıştıkları zamana yakındı. O zamandan beri evrensel standart haline geldi.
Formatı Anlamak
Unix zaman damgaları, ihtiyaç duyulan hassasiyete bağlı olarak farklı formatlarda gelir:
- Saniye (10 basamak): Standart format, örneğin
1728773400 - Milisaniye (13 basamak): Daha fazla hassasiyet için, örneğin
1728773400000 - Mikrosaniye (16 basamak): Ultra hassas zamanlama için, örneğin
1728773400000000
Saniye Cinsinden Yaygın Zaman Aralıkları
Bu yaygın aralıkları anlamak, zaman damgalarıyla daha sezgisel çalışmana yardımcı olabilir:
| Zaman Periyodu | Saniye | Hızlı Hesaplama |
|---|---|---|
| 1 Saat | 3.600 | 60 × 60 |
| 1 Gün | 86.400 | 24 × 3.600 |
| 1 Hafta | 604.800 | 7 × 86.400 |
| 1 Ay (ort.) | 2.629.743 | 30.44 × 86.400 |
| 1 Yıl (ort.) | 31.556.926 | 365.24 × 86.400 |
2038 Yılı Problemi (Y2038)
İşte önemli bir şey: birçok sistem Unix zaman damgalarını 32-bit işaretli tamsayı olarak saklar. Bu, Y2K hatasına benzer bir problem yaratır.
32-bit işaretli bir tamsayı yalnızca 2.147.483.647 saniyeye kadar sayabilir. 19 Ocak 2038, 03:14:07 UTC'ye ulaştığımızda, bu sayaç taşacak ve negatif bir sayıya dönecek, potansiyel olarak sistem hatalarına ve bug'lara neden olacak.
Mevcut Epoch Zamanını Almak
Her programlama dilinin mevcut Unix zaman damgasını almak için kendi yöntemi var. İşte en yaygın yöntemler:
Web Geliştirme
JavaScript
// Milisaniye cinsinden zaman damgası al, saniye için 1000'e böl
const timestamp = Math.floor(Date.now() / 1000);
// Alternatif yöntem
const timestamp = Math.floor(new Date().getTime() / 1000);
PHP
// Basit ve anlaşılır
$timestamp = time();
// DateTime kullanarak (daha esnek)
$timestamp = (new DateTime())->getTimestamp();
Backend Dilleri
Python
import time
# Mevcut zaman damgasını al
timestamp = int(time.time())
# datetime modülünü kullanarak
from datetime import datetime
timestamp = int(datetime.now().timestamp())
Java
// Milisaniye döndürür, saniye için 1000'e böl
long timestamp = System.currentTimeMillis() / 1000;
// Instant kullanarak (Java 8+)
long timestamp = Instant.now().getEpochSecond();
C#
// .NET Framework 4.6+ / .NET Core
long timestamp = DateTimeOffset.Now.ToUnixTimeSeconds();
// Eski versiyonlar
var epoch = (DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalSeconds;
Ruby
# Mevcut zaman damgasını al
timestamp = Time.now.to_i
# Alternatif
timestamp = Time.new.to_i
Go
import "time"
// Mevcut Unix zaman damgasını al
timestamp := time.Now().Unix()
// Milisaniye için
milliseconds := time.Now().UnixMilli()
Veritabanı Sorguları
MySQL
-- Mevcut zaman damgasını al
SELECT UNIX_TIMESTAMP();
-- Belirli bir tarihten zaman damgası al
SELECT UNIX_TIMESTAMP('2025-10-12 14:30:00');
PostgreSQL
-- Mevcut zaman damgasını al
SELECT EXTRACT(EPOCH FROM NOW());
-- Belirli bir tarihten
SELECT EXTRACT(EPOCH FROM TIMESTAMP '2025-10-12 14:30:00');
SQLite
-- Mevcut zaman damgasını al
SELECT STRFTIME('%s', 'now');
-- Belirli bir tarihten
SELECT STRFTIME('%s', '2025-10-12 14:30:00');
Komut Satırı
Unix/Linux Shell
# Mevcut zaman damgasını al
date +%s
# Belirli bir tarihi zaman damgasına çevir
date +%s -d "2025-10-12 14:30:00"
# UTC/GMT zamanı için -d yerine -ud kullan
date +%s -ud "2025-10-12 14:30:00"
PowerShell
# Mevcut zaman damgasını al
[int][double]::Parse((Get-Date (Get-Date).ToUniversalTime() -UFormat %s))
Epoch'tan Okunabilir Tarihe Dönüştürme
Bir Unix zaman damgasına sahip olduğunda, genellikle onu okunabilir bir tarih formatına geri dönüştürmen gerekecek:
JavaScript
// Zaman damgasını Date nesnesine çevir
const date = new Date(timestamp * 1000); // Milisaniye için 1000 ile çarp
// Formatla
console.log(date.toLocaleString()); // Yerel format
console.log(date.toISOString()); // ISO 8601 formatı
PHP
// Zaman damgasını formatla
$date = date('Y-m-d H:i:s', $timestamp);
// RFC 2822 formatı
$date = date('r', $timestamp);
// DateTime kullanarak
$date = (new DateTime())->setTimestamp($timestamp)->format('Y-m-d H:i:s');
Python
from datetime import datetime
# datetime nesnesine çevir
dt = datetime.fromtimestamp(timestamp)
# Formatla
formatted = dt.strftime('%Y-%m-%d %H:%M:%S')
# UTC için
dt_utc = datetime.utcfromtimestamp(timestamp)
MySQL
-- Zaman damgasını datetime'a çevir
SELECT FROM_UNIXTIME(1728773400);
-- Özel formatla
SELECT FROM_UNIXTIME(1728773400, '%Y-%m-%d %H:%i:%s');
Okunabilir Tarihten Epoch'a Dönüştürme
Ters işlem de aynı derecede önemli:
JavaScript
// Tarih dizesini zaman damgasına çevir
const timestamp = Math.floor(new Date('2025-10-12 14:30:00').getTime() / 1000);
// Date.parse() kullanarak
const timestamp = Math.floor(Date.parse('October 12, 2025') / 1000);
PHP
// Çoğu İngilizce tarih metnini çözümle
$timestamp = strtotime('15 November 2025');
$timestamp = strtotime('next Monday');
$timestamp = strtotime('+1 week');
// DateTime kullanarak
$timestamp = (new DateTime('2025-10-12 14:30:00'))->getTimestamp();
Python
from datetime import datetime
import time
# Tarih dizesini çözümle
dt = datetime.strptime('2025-10-12 14:30:00', '%Y-%m-%d %H:%M:%S')
timestamp = int(dt.timestamp())
# UTC için
import calendar
timestamp = calendar.timegm(time.strptime('2025-10-12 14:30:00', '%Y-%m-%d %H:%M:%S'))
En İyi Uygulamalar
Uygulamalarında Unix zaman damgalarıyla çalışırken:
- Her zaman 64-bit tamsayılar kullan - Y2038 probleminden kaçınmak için
- Zaman damgalarını UTC olarak sakla - veritabanında, yalnızca gösterim için yerel zamana çevir
- Tutarlı ol - uygulamanın tamamında hassasiyetinle (saniye vs milisaniye)
- Formatını belgele - saniye mi yoksa milisaniye mi kullandığını net bir şekilde belirt
- Karmaşık tarih/saat işlemleri için zaman dilimi farkında kütüphaneleri düşün
- Asla yerel zamanı zaman dilimi bilgisi olmadan zaman damgası olarak saklama
Sonuç
Unix zaman damgaları, her geliştiricinin anlaması gereken programlamada temel bir kavramdır. Tüm sistemler ve programlama dilleri arasında çalışan basit, evrensel bir zaman temsil yöntemi sağlarlar.
İster bir web uygulaması geliştiriyor ol, ister veritabanlarıyla çalışıyor ol veya sadece görevleri zamanlamaya ihtiyacın olsun, epoch zamanını anlamak hayatını çok daha kolaylaştıracak. Zaman damgaları ile okunabilir tarihler arasında hızlıca dönüşüm yapmak için Unix Zaman Damgası Dönüştürücü aracımızı kullan!