Unix Timestamp: nedir, dönüştürme ve mobil geliştirmede depolama

Yazar: IT Sectr Yayınlanma: 2026-07-14 Okuma süresi: 9 dk

Unix Timestamp, 1 Ocak 1970 00:00:00 UTC'den bu yana geçen saniye sayısını temsil eden bir tam sayıdır. Bu evrensel zaman biçimi, saat dilimine bağımlı olmadan zaman işaretçilerini depolamak ve iletmek için işletim sistemlerinde, veritabanlarında, API'lerde ve mobil uygulamalarda kullanılır. Google Developers Blog (2025)'a göre, Unix Timestamp REST API'lerde zaman serileştirmesi için en popüler biçim olmaya devam ediyor — genel web arayüzlerinin %87'si bunu kullanıyor.

Anahtar Noktalar

  • Unix Timestamp — 1 Ocak 1970 UTC'den itibaren saniye sayısı, negatif olmayan bir tam sayı
  • Evrensellik — biçim saat diliminden bağımsızdır, sunucu ve istemci arasında veri alışverişini basitleştirir
  • 2038 Sorunu — 32 bit sistemler için, timestamp değeri 2^31'i aşacak ve taşmaya neden olacak
  • Milisaniye — Android ve Java'da daha çok milisaniye cinsinden Java Timestamp kullanılır (Unix Timestamp x 1000)
  • Depolama — timestamp ISO dizelerinden daha derli topludur ve veritabanlarında sıralama ve karşılaştırma için daha verimlidir

Unix Timestamp Nedir?

Unix Timestamp (POSIX time, Epoch time veya Unix time olarak da bilinir), 1 Ocak 1970 00:00:00 UTC'den (Unix dönemi) bu yana geçen saniye sayısını tanımlayan bir zaman ölçüm sistemidir. Bu tarih, Unix işletim sistemi için başlangıç noktası olarak seçildi ve biçim daha sonra bilgi işlem sistemlerinde zamanı temsil etmek için fiili standart haline geldi. Timestamp artık saniyeleri hesaba katmaz — her dakika 60 saniye olarak sayılır, ancak Uluslararası Dünya Dönüş Servisi bazen atomik zamanı düzeltmek için fazladan bir saniye ekler.

Unix Dönemi: Neden 1970?

1 Ocak 1970 seçimi, Unix işletim sisteminin tarihiyle bağlantılıdır. Geliştiriciler Ken Thompson ve Dennis Ritchie bu tarihi basit yuvarlak bir başlangıç noktası olarak seçtiler — tüm olası tarihleri kapsayacak kadar erken ve zamanın 32 bit işaretli bir tam sayıda saklanabilmesi için yeterince geçti. Başlangıçta zaman saniyenin altmışta biriyle, ardından tick'lerle (1/60 saniye) ölçüldü ve yalnızca Unix'in Yedinci Sürümünde (V7, 1979) biçim tam saniye sayısı olarak istikrar kazandı. The Open Group Base Specifications'a (Issue 8, 2024) göre, POSIX uyumlu sistemlerin bu biçimi desteklemesi zorunludur.

Unix Timestamp Nasıl Çalışır

Unix Timestamp'in çalışma prensibi basit bir sayaca dayanır: geçen her gün değere 86.400 saniye ekler. Örneğin, 1.720.000.000 timestamp'i 2024 ortasındaki bir tarihe karşılık gelir — tam dönüştürme, bir gün, saat ve dakikadaki saniye sayısına bölünerek yapılabilir. Bu yaklaşım, timestamp'i makine depolaması için ideal hale getirir: 4 bayt (32 bit int) veya 8 bayt (64 bit long) kaplayan ve doğrudan karşılaştırmayı destekleyen bir tam sayıdır — daha büyük timestamp = daha sonraki bir tarih.

Dönüştürme Matematiği

Bir gün = 86.400 saniye (24 x 60 x 60). Bir saat = 3.600 saniye. Bir timestamp'i tarihe dönüştürmek için, dönemden itibaren gün, saat, dakika ve saniye sayısını sırayla hesaplamanız gerekir. Ters dönüştürme — bir tarihi 1970-01-01'den itibaren günlere dönüştürün, ardından 86.400 ile çarpın ve UTC ofsetini ekleyin. Java ve Kotlin'de bu hesaplamalar zaten standart java.time.Instant ve java.util.Date sınıflarında uygulanmıştır ve geliştiriciyi manuel hesaplamalardan kurtarır.

kotlin
        // Unix Timestamp'i saniye cinsinden al
val seconds = System.currentTimeMillis() / 1000

// java.time ile timestamp'i tarihe dönüştür
val instant = Instant.ofEpochSecond(seconds)
val localDate = instant.atZone(ZoneId.of("Europe/Moscow")).toLocalDate()

// Ters: tarihten timestamp'e
val date = LocalDate.of(2026, 7, 21)
val ts = date.atStartOfDay(ZoneOffset.UTC).toEpochSecond()

Unix Timestamp'i Tarihe Dönüştürme ve Geri

Unix Timestamp'i insan tarafından okunabilir bir tarihe dönüştürmek, mobil geliştirmedeki en yaygın işlemlerden biridir. Android'de, minimum API sürümüne bağlı olarak çeşitli dönüştürme yöntemleri mevcuttur: API 26+ için java.time.Instant önerilir, eski sürümler için java.util.Date ve java.text.SimpleDateFormat kullanılır. Android ve JVM'in varsayılan olarak saniye değil milisaniye kullandığını hatırlamak önemlidir — sunucudan saniye cinsinden bir timestamp alınırsa, standart oluşturuculara aktarılmadan önce 1000 ile çarpılmalıdır.

Saat Dilimi Duyarlı Dönüştürme

Unix Timestamp'in başlıca avantajlarından biri konum bağımsızlığıdır. Sunucu her zaman timestamp'i UTC olarak döndürür ve yerel tarih ve saate dönüştürme istemci tarafında gerçekleştirilir. Kotlin'de, uygun ZoneId (sistem veya kullanıcı tarafından seçilen) ile ZonedDateTime kullanılır. Bir uygulama farklı saat dilimlerinde zaman gösteriyorsa (örneğin, gezginler için), timestamp sunucudan saat dilimini iletme ihtiyacını ortadan kaldırır — tek bir zaman işareti yeterlidir.

kotlin
// Kullanıcı saat dilimi ile dönüştür
fun formatTimestamp(seconds: Long, zoneId: ZoneId): String {
    val instant = Instant.ofEpochSecond(seconds)
    val formatter = DateTimeFormatter
        .ofPattern("dd.MM.yyyy HH:mm:ss")
    return formatter.format(instant.atZone(zoneId))
}

// Örnek: timestamp = 1720000000, zone = Europe/Moscow
val result = formatTimestamp(1720000000, ZoneId.of("Europe/Moscow"))

2038 Yılı Sorunu

2038 Yılı Sorunu (Y2K38), Unix Timestamp'in 32 bit işaretli bir tam sayı olarak depolanmasının temel bir sınırlamasıdır. 32 bit işaretli int'in maksimum değeri 2.147.483.647'dir ve bu, 19 Ocak 2038 03:14:07 UTC'ye karşılık gelir. Bu tarihten sonra değer taşar ve negatif bir sayıya dönüşerek 32 bit time_t kullanan sistemlerde arızalara neden olur. Sorun, iyi bilinen Y2K'ya benzer ancak öncelikle gömülü sistemleri, eski Android sürümlerini ve 32 bit mimarili IoT cihazlarını etkiler.

Sorunun Boyutu

Linux Foundation'a (2025) göre, endüstriyel ve IoT segmentlerindeki Linux cihazlarının yaklaşık %15'i hala 32 bit yapıları kullanıyor. Android cihazlar için risk daha düşüktür — çoğu modern akıllı telefon 64 bit işlemcilerde (ARM64) çalışır, ancak Android 4.x ve altındaki eski modeller 32 bit time_t kullanabilir. Çözüm, 292 milyar yıla kadar güvenli olan 64 bit time_t'ye geçiştir. Android 5.0 (API 21) ile başlayarak, tüm cihazlar çekirdek düzeyinde 64 bit zaman kullanır. Mobil uygulama geliştiricilerinin, uygulama düzeyinde sorunu önlemek için timestamp'i Long (64 bit) olarak depolaması yeterlidir.

Android'de Unix Timestamp ile Çalışma

Android geliştirmede, Unix Timestamp'in doğru şekilde işlenmesi veri senkronizasyonu, mesaj alma sürelerinin görüntülenmesi, zaman aşımlarının hesaplanması ve bildirimlerin zamanlanması için kritiktir. Sistem çağrısı System.currentTimeMillis(), Unix döneminden bu yana milisaniye cinsinden geçerli zamanı döndürür — bu, cihazda bulunan en doğru zaman kaynağıdır. Ağ istekleri için genellikle saniye cinsinden Unix Timestamp kullanılır, çünkü çoğu REST API ve veritabanı saniye cinsinden çalışır.

Önerilen Uygulamalar

Aralıkları ölçmek için asla System.currentTimeMillis() kullanmayın — bu amaç için System.nanoTime() vardır, monotondur ve kullanıcı saat değişikliklerinden etkilenmez. Zaman görüntüleme için, timestamp'i her zaman UTC olarak depolayın ve kullanıcı arayüzü tarafında yerel saat dilimine dönüştürün. Veritabanlarıyla (SQLite, Room) çalışırken INTEGER türünü kullanın ve timestamp'i saniye cinsinden depolayın — bu 8 bayt (Long) kaplar ve yerel SQL sıralamasını destekler. JSON serileştirmesi için, timestamp'i dize yerine sayı (Long) olarak göndermeniz önerilir — daha derli topludur ve daha hızlı ayrıştırılır.

kotlin
// Doğru yürütme süresi ölçümü
val start = System.nanoTime()
// ... işlem ...
val elapsed = System.nanoTime() - start
val seconds = elapsed / 1_000_000_000.0

// Room'da (Entity) sakla
@Entity
data class Message(
    @PrimaryKey val id: Long,
    val text: String,
    val createdAt: Long // Saniye cinsinden Unix Timestamp
)

Sunucu Zamanını İşleme

Sunucudan Unix Timestamp alırken her zaman ölçüm birimini kontrol edin: bazı API'ler milisaniye (JavaScript uyumlu) döndürür, diğerleri saniye (POSIX standardı) döndürür. Birimler üzerindeki anlaşma API belgelerinde belirtilmelidir. Sunucu yanıtında, timestamp Long (JSON sayısı) veya String (ISO 8601) olarak iletilebilir. Hata ayıklama için, timestamp'i insan tarafından okunabilir bir biçimde çıkaran bir yardımcı işlev ekleyin — bu, geliştirme sırasında zaman işaretlerinin doğrulanmasını basitleştirir.

Veritabanlarında Zaman İşaretçilerini Depolama

Bir veritabanında zaman depolama biçimi seçimi, sorgu performansını, kod karmaşıklığını ve saat dilimi işlemenin doğruluğunu doğrudan etkiler. Unix Timestamp, ilişkisel veritabanları için en verimli biçimdir: bir tam sayı (4 veya 8 bayt) olarak depolanır, indekslemeyi destekler ve hızlı sıralamaya olanak tanır. ISO 8601 dizelerinin aksine, timestamp sıralama için ayrıştırma gerektirmez ve bir dizinde daha az yer kaplar. Room ve SQLite için, timestamp'in INTEGER olarak depolanması ve zaman sütununda bir dizin kullanılması önerilir.

Depolama BiçimiBoyutSıralamaDizinleme
Unix Timestamp (INTEGER)4–8 baytHızlıVerimli
ISO 8601 (TEXT)20–30 baytYavaşOrta
DATETIME (SQLite)8 baytOrtaOrta

Mobil Projeler için Öneriler

Room kitaplığını kullanan Android uygulamaları için, timestamp'lerin Long (64 bit) olarak depolanması ve Long ile Date veya Instant arasında otomatik dönüştürme için bir TypeConverter kullanılması önerilir. Veritabanında sorgulama yaparken karşılaştırma işleçlerini (>, <, BETWEEN) kullanın — bunlar tamsayı türleriyle yerel olarak çalışır. Zamana dayalı sıralama gerektiren verileri (örneğin, mesaj listesi) önbelleğe almak için, her zaman timestamp sütununda bir dizin oluşturun — bu, büyük veri hacimlerinde ORDER BY içeren sorguları birkaç kat hızlandıracaktır.

Sıkça Sorulan Sorular

Unix Timestamp nedir ve nasıl çalışır?

Unix Timestamp, 1 Ocak 1970 00:00:00 UTC'den bu yana geçen saniye sayısıdır. Basit bir sayaç gibi çalışır: geçen her gün 86.400 saniye ekler. Saat dilimine bağımlı olmadan sunucu ve istemci arasında kolayca karşılaştırılabilen, sıralanabilen ve aktarılabilen bir tam sayıdır.

Kotlin'de Unix Timestamp tarihe nasıl dönüştürülür?

java.time (API 26+) için Instant.ofEpochSecond(timestamp) veya eski Android sürümleri için Date(timestamp * 1000) kullanın. Instant elde edildikten sonra LocalDate, ZonedDateTime'a dönüştürülebilir veya DateTimeFormatter ile biçimlendirilebilir. Timestamp saniye cinsindeyse 1000 ile çarpmayı unutmayın.

2038 yılı sorununun özü nedir?

19 Ocak 2038 03:14:07 UTC'de, 32 bit işaretli int'in (2.147.483.647) değeri aşılacak ve taşmaya neden olacaktır. 32 bit time_t kullanan sistemler zamanı negatif bir sayı olarak yorumlamaya başlayacaktır. Çözüm, modern Android cihazlarda (API 21+) zaten kullanılan 64 bit time_t'ye geçiştir.

Android'de geçerli Unix Timestamp nasıl alınır?

Saniye için System.currentTimeMillis() / 1000 veya milisaniye için System.currentTimeMillis() çağrısı yapın. Ağ senkronizasyonunu dikkate alan daha doğru bir sonuç için Instant.now().epochSecond (API 26+ gerekir) veya Android için NTP istemci kitaplıklarını kullanın.

Unix Timestamp milisaniyeden nasıl farklıdır?

Unix Timestamp, 1970-01-01 UTC'den itibaren saniyedir (tam sayı). Java Timestamp milisaniye kullanır — aynı ofset ancak 1000 kat daha hassas. Dönüştürme için: milisaniye 1000'e bölünür. JSON API'leri daha çok saniye (Unix Timestamp) kullanırken, Android platformu milisaniye (System.currentTimeMillis) kullanır.

Özet

  • Unix Timestamp — 1 Ocak 1970 UTC'den itibaren saniye sayısına dayalı evrensel bir tam sayı zaman biçimi
  • Saat Dilimi Bağımsızlığı — timestamp her zaman UTC'dedir, yerel saate dönüştürme istemci tarafında yapılır ve saat dilimiyle ilgili hata sınıfını ortadan kaldırır
  • Dönüştürme — Android'de Instant.ofEpochSecond (API 26+) veya eski platform sürümleri için 1000 ile çarpma ile Date kullanın
  • 2038 Sorunu — 32 bit time_t sınırlaması; çözüm 64 bit Long'da depolama ve modern Android sürümleri (API 21+) kullanmaktır
  • Veritabanı Depolama — SQLite/Room'da INTEGER olarak timestamp, ISO 8601 dizelerinden boyut, sıralama hızı ve dizinleme açısından daha verimlidir
  • Zaman Ölçümü İçin — aralıklar için System.nanoTime(), zaman işaretleri için System.currentTimeMillis() kullanın (kullanıcı ayarlamalarını dikkate alarak)
  • Sunucu Anlaşması — dönüştürme hatalarını önlemek için API belgelerinde her zaman ölçüm birimlerini (saniye veya milisaniye) netleştirin

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun