Epoch Zamanı: Unix Zaman Damgalarının Temeli

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.

Hızlı Örnek: Mevcut Unix zaman damgası 1728773400 ise, bu 1 Ocak 1970 gece yarısından bu yana tam olarak 1.728.773.400 saniye geçtiği anlamına gelir.

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.

Önemli: Modern sistemler 64-bit zaman damgalarına geçiyor, bunlar 292 milyar yıl daha taşmayacak. Uygulamalarının zaman damgası depolaması için 64-bit tamsayılar kullandığından emin ol!

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!

Hemen dene: Unix zaman damgalarıyla gerçek zamanlı çalışmayı pratik yapmak için dönüştürücü aracımıza git!