Unix Timestamp: bu nədir, konvertasiya və mobil inkişafda saxlama

Müəllif: IT Sectr Dərc olunub: 2026-07-14 Oxuma vaxtı: 9 dəq

Unix Timestamp — 1 yanvar 1970-ci il 00:00:00 UTC-dən etibarən keçən saniyələrin sayını təmsil edən tam ədəddir. Bu universal vaxt formatı əməliyyat sistemlərində, verilənlər bazalarında, API-lərdə və mobil tətbiqlərdə vaxt işarələrinin saat qurşağına bağlı olmadan saxlanması və ötürülməsi üçün istifadə olunur. Google Developers Blog (2025) məlumatlarına görə, Unix Timestamp REST API-də vaxtın seriallaşdırılması üçün ən populyar format olaraq qalır — ondan ictimai veb interfeyslərin 87%-i istifadə edir.

Əsas məqamlar

  • Unix Timestamp — 1 yanvar 1970-ci il UTC-dən saniyələrin sayı, mənfi olmayan tam ədəd
  • Universalıq — format saat qurşağından asılı deyil, bu da server və müştəri arasında məlumat mübadiləsini asanlaşdırır
  • 2038 problemi — 32-bit sistemlər üçün timestamp dəyəri 2^31-i keçəcək və daşma baş verəcək
  • Millisaniyələr — Android və Java-da daha çox Java Timestamp millisaniyələrlə istifadə olunur (Unix Timestamp x 1000)
  • Saxlama — timestamp ISO sətrlərindən daha yığcam və verilənlər bazalarında çeşid və müqayisə üçün daha səmərəlidir

Unix Timestamp nədir?

Unix Timestamp (həmçinin POSIX time, Epoch time və ya Unix time kimi tanınır) — 1 yanvar 1970-ci il 00:00:00 UTC-dən (Unix dövrü) keçən saniyələrin sayını təyin edən vaxt ölçmə sistemidir. Bu tərix Unix əməliyyat sistemi üçün başlanğıc nöqtəsi kimi seçilmiş və sonradan bu format hesablama sistemlərində vaxtın təmsili üçün de-fakto standarta çevrilmişdir. Timestamp artıq saniyələri nəzərə almır — hər dəqiqə 60 saniyə hesab olunur, baxmayaraq ki, Beynəlxalq Yer Fırlanma Xidməti bəzən atom vaxtını korreksiya etmək üçün əlavə saniyə əlavə edir.

Unix dövrü: nəyə görə 1970-ci il?

1 yanvar 1970-ci ilin seçilməsi Unix əməliyyat sisteminin inkişaf tarixi ilə bağlıdır. Tərtibatçılar Ken Thompson və Dennis Ritchie bu tərixi sadə bir dəyirmi başlanğıc nöqtəsi kimi seçdilər — o, bütün mümkün tərixləri əhatə etmək üçün kifayət qədər erkən və eyni zamanda vaxtı 32-bit işarəli tam ədəddə saxlamaq üçün kifayət qədər gec idi. Əvvəlcə vaxt saniyənin altmışda bir hissəsində, sonra tik lərdə (1/60 saniyə) ölçülür və yalnız Unix-in yeddinci nəşrində (V7, 1979) format tam saniyə sayı kimi sabitləşmişdir. The Open Group Base Specifications (Issue 8, 2024) məlumatlarına görə, POSIX-uyğun sistemlər bu formatı dəstəkləməlidir.

Unix Timestamp necə işləyir

Unix Timestamp-in işləmə prinsipi sadə sayıcıya əsaslanır: hər keçən gün dəyərə 86 400 saniyə əlavə edir. Məsələn, timestamp 1 720 000 000 2024-cü ilin ortalarındakı bir tərixə uyğunda gəlir — dəqiq çevrilmə gün, saat və dəqiqədəki saniyə sayına bölməklə aparıla bilər. Bu yanaşma timestamp-i maşin saxlanması üçün ideal edir: bu, 4 bayt (32-bit int) və ya 8 bayt (64-bit long) tutan və birbaşa müqayisəni dəstəkləyən tam ədəddir — böyük timestamp = daha gec tərix.

Konvertasiya riyaziyyatı

Bir gün = 86 400 saniyə (24 x 60 x 60). Bir saat = 3600 saniyə. Timestamp-i tarixə çevirmək üçün dövrün əvvəlindən günlərin, saatların, dəqiqələrin və saniyələrin sayını ardıcıl olaraq hesablamaq lazımdır. Tərs çevirmə — tərixi 1970-01-01-dən günlərə çevirmək, sonra 86 400-ə vurmaq və UTC-yə nisbətən yerdəyişməni əlavə etməkdir. Java və Kotlin-də bu hesablamalar artıq java.time.Instantjava.util.Date standart siniflərində tətbiq edilmişdir ki, bu da tərtibatçını əl hesablamalarından azad edir.

kotlin
        // Unix Timestamp-i saniyələrlə əldə edin
val seconds = System.currentTimeMillis() / 1000

// Timestamp-i java.time vasitəsilə tarixə çevirin
val instant = Instant.ofEpochSecond(seconds)
val localDate = instant.atZone(ZoneId.of("Europe/Moscow")).toLocalDate()

// Tərsi: tarixdən timestamp-ə
val date = LocalDate.of(2026, 7, 21)
val ts = date.atStartOfDay(ZoneOffset.UTC).toEpochSecond()

Unix Timestamp-in tarixə və əksinə konvertasiyası

Unix Timestamp-in insan tərəfindən oxuna bilən tarixə çevrilməsi mobil inkişafda ən çox yayılmış əməliyyatlardan biridir. Android-də minimum API versiyasından asılı olaraq bir neçə çevirmə üsulu mövcuddur: API 26+ üçün java.time.Instant tövsiyə olunur, köhnə versiyalar üçün java.util.Date və java.text.SimpleDateFormat istifadə olunur. Yadda saxlamaq vacibdir ki, Android və JVM standart olaraq millisaniyələrdən istifadə edir, saniyələrdən yox — əgər timestamp serverdən saniyələrlə alınıbsa, standart konstruktorlara ötürməzdən əvvəl onu 1000-ə vurmaq lazımdır.

Saat qurşağı nəzərə alınmaqla konvertasiya

Unix Timestamp-in əsas üstünlüklərindən biri yerləşmədən asılı olmamasıdır. Server həmişə timestamp-i UTC-də qaytarır, lokal tarix və vaxta çevirmə isə müştəri tərəfində aparılır. Kotlin-də bunun üçün müvafiq ZoneId ilə ZonedDateTime istifadə olunur — sistem və ya istifadəçi tərəfindən seçilmiş. Əgər tətbiq müxtəlif qurşaqlarda vaxtı göstərirsə (məsələn, səyyahlar üçün), timestamp serverdən saat qurşağını ötürmək zörurətini aradan qaldırır — vahid vaxt işarəsi kifayətdir.

kotlin
// İstifadəçinin saat qurşağı ilə konvertasiya
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))
}

// Nümunə: timestamp = 1720000000, zona = Europe/Moscow
val result = formatTimestamp(1720000000, ZoneId.of("Europe/Moscow"))

2038-ci il problemi

2038-ci il problemi (Year 2038 Problem, Y2K38) — Unix Timestamp-in saxlanması üçün 32-bit işarəli tam ədədin fundamental məhdudiyyətidir. 32-bit signed int-in maksimal dəyəri 2 147 483 647-dir, bu da 19 yanvar 2038-ci il 03:14:07 UTC-yə uyğundur. Bu tərixdən sonra dəyər daşır və mənfi ədədə çevrilir, bu da 32-bit time_t istifadə edən sistemlərdə nasazlıqlara səbəb olur. Problem məşhur Y2K-yə bənzəyir, lakin ilk növbədə daxili sistemlərə, köhnə Android versiyalarına və 32-bit arxitekturalı IoT cihazlarına təsir edir.

Problemin miqyası

Linux Foundation (2025) məlumatlarına görə, sənaye və IoT seqmentindəki Linux cihazlarının təxminən 15%-i hələ də 32-bit qurğularından istifadə edir. Android cihazları üçün risk daha aşağıdır — müasir smartfonların əksəriyyəti 64-bit prosessorlarda (ARM64) işləyir, lakin Android 4.x və daha köhnə modellər 32-bit time_t istifədə edə bilər. Problemin həlli — 292 milyard il təhlükəsiz olan 64-bit time_t-a miqrasiyadır. Android 5.0-dən (API 21) başlayaraq bütün cihazlar nüvə səviyyəsində 64-bit vaxtdan istifadə edir. Mobil tətbiq tərtibatçılarına problemdən qaçmaq üçün timestamp-i Long (64-bit) tipində saxlamaq kifayətdir.

Android-də Unix Timestamp ilə işləmə

Android inkişafında Unix Timestamp ilə düzgün işləmə məlumatların sinxronizasiyası, mesajların qəbul vaxtının göstərilməsi, vaxt limitlərinin hesablanması və bildirişlərin planlaşdırılması üçün kritik əhəmiyyət kəsb edir. System.currentTimeMillis() sistem çağırışı cari vaxtı Unix dövründən millisaniyələrlə qaytarır — bu, cihazda mövcud olan ən dəqiq vaxt mənbəyidir. Şəbək sorğuları üçün adətən Unix Timestamp saniyələrlə istifadə olunur, çünki REST API və verilənlər bazalarının əksəriyyəti məhz saniyələrlə işləyir.

Tövsiyə olunan təcrübələr

Heç vaxt intervalları ölçmək üçün System.currentTimeMillis() istifadə etməyin — bunun üçün System.nanoTime() var, o monotonikdir və istifadəçinin saat dəyişikliklərindən asılı deyil. Vaxtı göstərmək üçün həmişə timestamp-i UTC-də saxlayın və interfeys tərəfində lokal saat qurşağına çevirin. Verilənlər bazaları ilə işlərkən (SQLite, Room) INTEGER tipindən istifadə edin və timestamp-i saniyələrlə saxlayın — bu, 8 bayt (Long) tutur və SQL-in yerli çeşidini dəstəkləyir. JSON seriallaşdırması üçün timestamp-i sətir kimi deyil, ədəd (Long) kimi göndərmək tövsiyə olunur — bu, daha yığcam və daha sürətli parse olunur.

kotlin
// Düzgün icra vaxtı ölçümü
val start = System.nanoTime()
// ... əməliyyat ...
val elapsed = System.nanoTime() - start
val seconds = elapsed / 1_000_000_000.0

// Room-da saxla (Entity)
@Entity
data class Message(
    @PrimaryKey val id: Long,
    val text: String,
    val createdAt: Long // Unix Timestamp saniyələrlə
)

Serverdən vaxtın işlənməsi

Serverdən Unix Timestamp qəbul edərkən həmişə ölçü vahidini yoxlayın: bəzi API-lər millisaniyələr qaytarır (JavaScript-uyğun), digərləri isə saniyələr (POSIX standartı). Vahidlər barədə razılaşma API sənədləşməsində qeyd edilməlidir. Server cavabında timestamp Long (JSON ədədi) və ya String (ISO 8601) kimi ötürülə bilər. Debug üçün timestamp-i insan tərəfindən oxuna bilən formatda göstərən köməkçi funksiya əlavə edin — bu, inkişaf zamanı vaxt işarələrinin düzgünlüyünü yoxlamağı asanlaşdırır.

Verilənlər bazalarında vaxt işarələrinin saxlanması

Verilənlər bazasında vaxtın saxlanma formatının seçimi sorğuların performansına, kodun mürəkkəbliyinə və saat qurşaqları ilə işin düzgünlüyünə birbaşa təsir edir. Unix Timestamp — relyasiya verilənlər bazaları üçün ən səmərəli formatdır: tam ədəd kimi saxlanılır (4 və ya 8 bayt), indeksləmə və sürətli çeşid dəstəklənir. ISO 8601 sətrlərindən fərqli olaraq, timestamp çeşid zamanı parse tələb etmir və indeksdə daha az yer tutur. Room və SQLite üçün timestamp-i INTEGER tipində saxlamaq və vaxt sütununda indeks istifadə etmək tövsiyə olunur.

Saxlama formatıÖlçüÇeşidİndeksləmə
Unix Timestamp (INTEGER)4–8 baytSürətliSəmərəli
ISO 8601 (TEXT)20–30 baytYavaşOrta
DATETIME (SQLite)8 baytOrtaOrta

Mobil layihələr üçün tövsiyələr

Room kitabxanası ilə Android tətbiqləri üçün timestamp-i Long (64-bit) kimi saxlamaq və Long ilə Date və ya Instant arasında avtomatik konvertasiya üçün TypeConverter istifadə etmək tövsiyə olunur. Verilənlər bazasına sorğular zamanı müqayisə operatorlarından (>, <, BETWEEN) istifadə edin — onlar tam ədəd tipləri ilə yerli şəkildə işləyir. Vaxta görə çeşid tələb edən məlumatların keşlənməsi üçün (məsələn, mesaj siyahısı) mütləq timestamp sütununda indeks yaradın — bu, böyük həcmli məlumatlarda ORDER BY ilə sorğuları bir neçə dəfə sürətləndirəcək.

Tez-tez verilən suallar

Unix Timestamp nədir və necə işləyir?

Unix Timestamp — 1 yanvar 1970-ci il 00:00:00 UTC-dən saniyələrin sayıdır. Sadə sayıcı kimi işləyir: hər keçən gün 86 400 saniyə əlavə edir. Bu, saat qurşağına bağlı olmadan server və müştəri arasında asanlıqla müqayisə edilə, çeşidlənə və ötürülə bilən tam ədəddir.

Kotlin-də Unix Timestamp-i tarixə necə çevirmək olar?

java.time üçün Instant.ofEpochSecond(timestamp) (API 26+) və ya köhnə Android versiyaları üçün Date(timestamp * 1000) istifadə edin. Instant aldıqdan sonra onu LocalDate, ZonedDateTime-a çevirmək və ya DateTimeFormatter vasitəsilə formatlaşdırmaq olar. Əgər timestamp saniyələrlədirsə, 1000-ə vurmağı unutmayın.

2038-ci il probleminin mahiyyəti nədir?

19 yanvar 2038-ci il saat 03:14:07 UTC-də 32-bit signed int (2 147 483 647) dəyəri keçiləcək və daşma baş verəcək. 32-bit time_t olan sistemlər vaxtı mənfi ədəd kimi şərh etməyə başlayacaq. Həll yolu — müasir Android cihazlarında (API 21+) artıq istifadə olunan 64-bit time_t-a miqrasiyadır.

Android-də cari Unix Timestamp-i necə əldə etmək olar?

Saniyələr üçün System.currentTimeMillis() / 1000 və ya millisaniyələr üçün System.currentTimeMillis() çağırın. Şəbək sinxronizasiyası ilə daha dəqiq nəticə üçün Instant.now().epochSecond (API 26+ tələb olunur) və ya Android üçün NTP kitabxanalarından istifadə edin.

Unix Timestamp millisaniyələrdən nə ilə fərqlənir?

Unix Timestamp — 1970-01-01 UTC-dən saniyələrdir (integer). Java Timestamp millisaniyələrdən istifadə edir — eyni yerdəyişmə, lakin 1000 dəfə dəqiqdir. Konvertasiya üçün: millisaniyələr 1000-ə bölünür. JSON-API-lərdə daha çox saniyələr (Unix Timestamp), Android platformasında isə millisaniyələr (System.currentTimeMillis) istifadə olunur.

Nəticə

  • Unix Timestamp — 1 yanvar 1970-ci il UTC-dən saniyələrin sayına əsaslanan universal tam ədəd vaxt formatı
  • Qurşaqlardan asılı olmama — timestamp həmişə UTC-dədir, lokal vaxta çevirmə müştəri tərəfində aparılır və saat qurşaqları ilə bağlı səhvləri aradan qaldırır
  • Konvertasiya — Android-də Instant.ofEpochSecond (API 26+) və ya köhnə versiyalar üçün 1000-ə vurmaqla Date istifadə olunur
  • 2038-ci il problemi — 32-bit time_t məhdudiyyəti; həll yolu — 64-bit Long-da saxlama və müasir Android versiyalarından istifadə (API 21+)
  • Verilənlər bazasında saxlama — SQLite/Room-da INTEGER kimi timestamp ölçü, çeşid sürəti və indeksləmə baxımından ISO 8601 sətrlərindən daha səmərəlidir
  • Vaxtın ölçülməsi üçün — intervallar üçün System.nanoTime(), vaxt işarələri üçün System.currentTimeMillis() istifadə edin (istifadəçi düzəlişləri nəzərə alınmaqla)
  • Server razılaşması — çevirmə səhvlərindən qaçmaq üçün API sənədləşməsində həmişə ölçü vahidlərini (saniyə və ya millisaniyə) dəqiqləşdirin

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun