Unix Timestamp: bu nima, konvertatsiya va mobil ishlanmada saqlash

Muallif: IT Sectr Nashr etilgan: 2026-07-14 O'qish vaqti: 9 daq

Unix Timestamp — 1-yanvar 1970-yil 00:00:00 UTC dan boshlab o’tgan soniyalar sonini ifodalovchi butun sondir. Bu universal vaqt formati operatsion tizimlarda, ma’lumotlar bazalarida, API larda va mobil ilovalarda vaqt belgilarini vaqt mintaqasiga bog‘liq bo‘lmagan holda saqlash va uzatish uchun ishlatiladi. Google Developers Blog (2025) ma’lumotlariga ko‘ra, Unix Timestamp REST API da vaqtni seriallashtirish uchun eng mashhur format bo‘lib qolmoqda — undan umumiy veb interfeyslarning 87% foydalanadi.

Asosiy ma’lumotlar

  • Unix Timestamp — 1-yanvar 1970-yil UTC dan soniyalar soni, manfiy bo‘lmagan butun son
  • Universallik — format vaqt mintaqasiga bog‘liq emas, bu server va mijoz o‘rtasida ma’lumot almashinuvini soddalashtiradi
  • 2038 muammosi — 32-bitli tizimlar uchun timestamp qiymati 2^31 dan oshib ketadi, bu to‘lib ketishga olib keladi
  • Millisoniyalar — Android va Java da Java Timestamp millisoniyalarda ko‘proq ishlatiladi (Unix Timestamp x 1000)
  • Saqlash — timestamp ISO satrlaridan ixchamroq va ma’lumotlar bazalarida saralash va taqqoslash uchun samaraliroq

Unix Timestamp nima?

Unix Timestamp (shuningdek POSIX time, Epoch time yoki Unix time sifatida tanilgan) — 1-yanvar 1970-yil 00:00:00 UTC (Unix davri) dan boshlab o‘tgan soniyalar sonini belgilaydigan vaqt o‘lchash tizimidir. Bu sana Unix operatsion tizimi uchun hisob boshlanishi sifatida tanlangan va keyinchalik format hisoblash tizimlarida vaqtni ifodalash uchun de-fakto standartga aylandi. Timestamp kabisa soniyalarini hisobga olmaydi — har bir daqiqa 60 soniya deb hisoblanadi, garchi Xalqaro Yer Aylanish Xizmati ba’zan atom vaqtini tuzatish uchun qo‘shimcha soniya qo‘shsa ham.

Unix davri: nega 1970-yil?

1-yanvar 1970-yilning tanlanishi Unix operatsion tizimining rivojlanish tarixi bilan bog‘liq. Ishlab chiquvchilar Ken Thompson va Dennis Ritchie bu sanani oddiy va yumaloq boshlang‘ich nuqta sifatida tanladilar — u barcha mumkin bo‘lgan sanalarni qamrab olish uchun yetarlicha erta va shu bilan birga vaqtni 32-bitli ishorali butun sonda saqlash uchun yetarlicha kech edi. Dastlab vaqt soniyaning oltmishdan bir qismida, keyin tik larda (1/60 soniya) o‘lchangan va faqat Unixning yettinchi nashrida (V7, 1979) format to‘liq soniyalar soni sifatida barqarorlashgan. The Open Group Base Specifications (Issue 8, 2024) ga ko‘ra, POSIX ga mos tizimlar ushbu formatni qo‘llab-quvvatlashi shart.

Unix Timestamp qanday ishlaydi

Unix Timestamp ning ishlash prinsipi oddiy hisoblagichga asoslanadi: har bir o‘tgan kun qiymatga 86 400 soniya qo‘shadi. Masalan, timestamp 1 720 000 000 2024-yil o‘rtalaridagi sanaga to‘g‘ri keladi — aniq konvertatsiyani kun, soat va daqiqadagi soniyalar soniga bo‘lish orqali amalga oshirish mumkin. Bunday yondashuv timestampni mashinada saqlash uchun ideal qiladi: bu 4 bayt (32-bitli int) yoki 8 bayt (64-bitli long) egallaydigan va to‘g‘ridan-to‘g‘ri taqqoslashni qo‘llab-quvvatlaydigan butun sondir — katta timestamp = keyingi sana.

Konvertatsiya matematikasi

Bir kun = 86 400 soniya (24 x 60 x 60). Bir soat = 3600 soniya. Timestampni sanaga aylantirish uchun davr boshidan kunlar, soatlar, daqiqalar va soniyalar sonini ketma-ket hisoblash kerak. Teskari konvertatsiya — sanani 1970-01-01 dan kunlarga aylantirish, keyin 86 400 ga ko‘paytirish va UTC ga nisbatan siljishni qo‘shish. Java va Kotlin da bu hisob-kitoblar java.time.Instant va java.util.Date standart sinflarida allaqachon amalga oshirilgan bo‘lib, bu ishlab chiquvchini qo‘lda hisoblashdan ozod qiladi.

kotlin
        // Unix Timestampni soniyalarda oling
val seconds = System.currentTimeMillis() / 1000

// Timestampni java.time orqali sanaga aylantiring
val instant = Instant.ofEpochSecond(seconds)
val localDate = instant.atZone(ZoneId.of("Europe/Moscow")).toLocalDate()

// Teskari: sanani timestampga
val date = LocalDate.of(2026, 7, 21)
val ts = date.atStartOfDay(ZoneOffset.UTC).toEpochSecond()

Unix Timestampni sanaga va aksincha aylantirish

Unix Timestamp ni odam o‘qiy oladigan sanaga aylantirish mobil ishlanmadagi eng keng tarqalgan operatsiyalardan biridir. Android da minimal API versiyasiga qarab bir nechta konvertatsiya usullari mavjud: API 26+ uchun java.time.Instant tavsiya etiladi, eski versiyalar uchun java.util.Date va java.text.SimpleDateFormat ishlatiladi. Shuni yodda tutish kerakki, Android va JVM standart sifatida millisoniyalardan foydalanadi, soniyalardan emas — agar timestamp serverdan soniyalarda olingan bo‘lsa, uni standart konstruktorlarga uzatishdan oldin 1000 ga ko‘paytirish kerak.

Foydalanuvchining vaqt mintaqasi bilan konvertatsiya

Unix Timestamp ning asosiy afzalliklaridan biri joylashuvdan mustaqilligidir. Server har doim timestampni UTC da qaytaradi, mahalliy sana va vaqtga konvertatsiya esa mijoz tomonda amalga oshiriladi. Kotlin da buning uchun tegishli ZoneId bilan ZonedDateTime ishlatiladi — tizimli yoki foydalanuvchi tomonidan tanlangan. Agar ilova vaqtni turli mintaqalarda ko‘rsatsa (masalan, sayohatchilar uchun), timestamp serverdan vaqt mintaqasini uzatish zaruratini bartaraf qiladi — yagona vaqt belgisi yetarli.

kotlin
// Foydalanuvchining vaqt mintaqasi bilan konvertatsiya
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))
}

// Misol: timestamp = 1720000000, mintaqa = Europe/Moscow
val result = formatTimestamp(1720000000, ZoneId.of("Europe/Moscow"))

2038-yil muammosi

2038-yil muammosi (Year 2038 Problem, Y2K38) — Unix Timestampni saqlash uchun 32-bitli ishorali butun sonning fundamental cheklovidir. 32-bitli signed int ning maksimal qiymati 2 147 483 647 ni tashkil qiladi, bu 2038-yil 19-yanvar soat 03:14:07 UTC ga to‘g‘ri keladi. Bu sanadan keyin qiymat to‘lib ketadi va manfiy songa aylanadi, bu esa 32-bitli time_t ishlatadigan tizimlarda nosozliklarga sabab bo‘ladi. Muammo mashhur Y2K ga o‘xshaydi, lekin birinchi navbatda o‘rnatilgan tizimlarga, eski Android versiyalariga va 32-bitli arxitekturali IoT qurilmalariga ta’sir qiladi.

Muammoning ko‘lami

Linux Foundation (2025) ma’lumotlariga ko‘ra, sanoat va IoT segmentidagi Linux qurilmalarining taxminan 15 foizi hali ham 32-bitli kompilyatsiyalardan foydalanadi. Android qurilmalari uchun xavf pastroq — zamonaviy smartfonlarning aksariyati 64-bitli protsessorlarda (ARM64) ishlaydi, ammo Android 4.x va undan eski modellar 32-bitli time_t ishlatishi mumkin. Muammoning yechimi — 292 milliard yil davomida xavfsiz bo‘lgan 64-bitli time_t ga migratsiyadir. Android 5.0 (API 21) dan boshlab barcha qurilmalar yadro darajasida 64-bitli vaqtdan foydalanadi. Mobil ilova ishlab chiquvchilariga muammodan qochish uchun timestampni Long (64-bitli) tipida saqlash kifoya.

Android da Unix Timestamp bilan ishlash

Android ishlanmasida Unix Timestamp bilan to‘g‘ri ishlash ma’lumotlarni sinxronlashtirish, xabarlarni qabul qilish vaqtini ko‘rsatish, vaqt chegaralarini hisoblash va bildirishnomalarni rejalashtirish uchun juda muhimdir. System.currentTimeMillis() tizim chaqiruvi joriy vaqtni Unix davridan millisoniyalarda qaytaradi — bu qurilmada mavjud bo‘lgan eng aniq vaqt manbaidir. Tarmoq so‘rovlari uchun odatda Unix Timestamp soniyalarda ishlatiladi, chunki aksariyat REST API lar va ma’lumotlar bazalari aynan soniyalar bilan ishlaydi.

Tavsiya etilgan amaliyotlar

Hech qachon intervallarni o‘lchash uchun System.currentTimeMillis() dan foydalanmang — buning uchun System.nanoTime() mavjud bo‘lib, u monotonik va foydalanuvchining soat o‘zgarishlariga bog‘liq emas. Vaqtni ko‘rsatish uchun har doim timestampni UTC da saqlang va interfeys tomonda mahalliy vaqt mintaqasiga aylantiring. Ma’lumotlar bazalari bilan ishlashda (SQLite, Room) INTEGER tipidan foydalaning va timestampni soniyalarda saqlang — bu 8 bayt (Long) egallaydi va SQL ning mahalliy saralashini qo‘llab-quvvatlaydi. JSON seriallashtirish uchun timestampni satr sifatida emas, balki son (Long) sifatida yuborish tavsiya etiladi — bu ixchamroq va tezroq tahlil qilinadi.

kotlin
// To‘g‘ri bajarilish vaqtini o‘lchash
val start = System.nanoTime()
// ... operatsiya ...
val elapsed = System.nanoTime() - start
val seconds = elapsed / 1_000_000_000.0

// Room da saqlash (Entity)
@Entity
data class Message(
    @PrimaryKey val id: Long,
    val text: String,
    val createdAt: Long // Unix Timestamp soniyalarda
)

Serverdan vaqtni qayta ishlash

Serverdan Unix Timestamp ni qabul qilganda har doim o‘lchov birligini tekshiring: ba’zi API lar millisoniyalarni qaytaradi (JavaScript ga mos), boshqalari soniyalarni (POSIX standarti). Birliklar haqidagi kelishuv API hujjatlarida qayd etilishi kerak. Server javobida timestamp Long (JSON soni) yoki String (ISO 8601) sifatida uzatilishi mumkin. Disk raskadrovka uchun timestampni odam o‘qiy oladigan formatda ko‘rsatadigan yordamchi funksiya qo‘shing — bu ishlanma davomida vaqt belgilarining to‘g‘riligini tekshirishni osonlashtiradi.

Vaqt belgilarini ma’lumotlar bazalarida saqlash

Ma’lumotlar bazasida vaqtni saqlash formatini tanlash so‘rovlarning unumdorligiga, kod murakkabligiga va vaqt mintaqalari bilan ishlashning to‘g‘riligiga bevosita ta’sir qiladi. Unix Timestamp — relyatsion ma’lumotlar bazalari uchun eng samarali format: butun son sifatida saqlanadi (4 yoki 8 bayt), indekslash va tez saralashni qo‘llab-quvvatlaydi. ISO 8601 satrlaridan farqli o‘laroq, timestamp saralashda tahlil qilishni talab qilmaydi va indeksda kamroq joy egallaydi. Room va SQLite uchun timestampni INTEGER tipida saqlash va vaqt ustunida indeksdan foydalanish tavsiya etiladi.

Saqlash formatiHajmSaralashIndekslash
Unix Timestamp (INTEGER)4–8 baytTezSamarali
ISO 8601 (TEXT)20–30 baytSekinO‘rta
DATETIME (SQLite)8 baytO‘rtaO‘rta

Mobil loyihalar uchun tavsiyalar

Room kutubxonasi bilan Android ilovalari uchun timestampni Long (64-bitli) sifatida saqlash va Long bilan Date yoki Instant o‘rtasida avtomatik konvertatsiya uchun TypeConverter dan foydalanish tavsiya etiladi. Ma’lumotlar bazasiga so‘rovlarda taqqoslash operatorlaridan (>, <, BETWEEN) foydalaning — ular sonli tiplar bilan mahalliy ishlaydi. Vaqt bo‘yicha saralashni talab qiladigan ma’lumotlarni keshlash uchun (masalan, xabarlar ro‘yxati) timestamp ustunida indeks yaratish shart — bu katta hajmdagi ma’lumotlarda ORDER BY bilan so‘rovlarni bir necha marta tezlashtiradi.

Ko‘p so‘raladigan savollar

Unix Timestamp nima va u qanday ishlaydi?

Unix Timestamp — 1-yanvar 1970-yil 00:00:00 UTC dan soniyalar soni. Oddiy hisoblagich kabi ishlaydi: har bir o‘tgan kun 86 400 soniya qo‘shadi. Bu vaqt mintaqasiga bog‘liq bo‘lmagan holda server va mijoz o‘rtasida osonlik bilan taqqoslanadigan, saralanadigan va uzatiladigan butun sondir.

Kotlin da Unix Timestampni sanaga qanday aylantirish mumkin?

java.time uchun Instant.ofEpochSecond(timestamp) (API 26+) yoki eski Android versiyalari uchun Date(timestamp * 1000) dan foydalaning. Instant olingandan so¬ng uni LocalDate, ZonedDateTime ga aylantirish yoki DateTimeFormatter orqali formatlash mumkin. Agar timestamp soniyalarda bo‘lsa, 1000 ga ko‘paytirishni unutmang.

2038-yil muammosining mohiyati nimada?

2038-yil 19-yanvar soat 03:14:07 UTC da 32-bitli signed int (2 147 483 647) qiymati oshib ketadi, bu to‘lib ketishga olib keladi. 32-bitli time_t ga ega tizimlar vaqtni manfiy son sifatida talqin qila boshlaydi. Yechim — zamonaviy Android qurilmalarida (API 21+) allaqachon ishlatiladigan 64-bitli time_t ga migratsiya.

Android da joriy Unix Timestampni qanday olish mumkin?

Soniyalar uchun System.currentTimeMillis() / 1000 yoki millisoniyalar uchun System.currentTimeMillis() ni chaqiring. Tarmoq sinxronizatsiyasi bilan aniqroq natija uchun Instant.now().epochSecond (API 26+ talab qilinadi) yoki Android uchun NTP kutubxonalaridan foydalaning.

Unix Timestamp millisoniyalardan qanday farq qiladi?

Unix Timestamp — 1970-01-01 UTC dan soniyalar (integer). Java Timestamp millisoniyalardan foydalanadi — bir xil siljish, lekin 1000 marta aniqroq. Konvertatsiya uchun: millisoniyalar 1000 ga bo‘linadi. JSON API larda ko‘pincha soniyalar (Unix Timestamp), Android platformasida esa millisoniyalar (System.currentTimeMillis) ishlatiladi.

Xulosa

  • Unix Timestamp — 1-yanvar 1970-yil UTC dan soniyalar soniga asoslangan universal sonli vaqt formati
  • Mintaqalardan mustaqillik — timestamp har doim UTC da, mahalliy vaqtga konvertatsiya mijoz tomonda amalga oshiriladi, bu vaqt mintaqalari bilan bog‘liq xatolar sinfini yo‘q qiladi
  • Konvertatsiya — Android da Instant.ofEpochSecond (API 26+) yoki eski versiyalar uchun 1000 ga ko‘paytirish bilan Date ishlatiladi
  • 2038-yil muammosi — 32-bitli time_t cheklovi; yechim — 64-bitli Long da saqlash va zamonaviy Android versiyalaridan foydalanish (API 21+)
  • Ma’lumotlar bazasida saqlash — SQLite/Room da INTEGER sifatida timestamp hajmi, saralash tezligi va indekslash bo‘yicha ISO 8601 satrlaridan samaraliroq
  • Vaqtni o‘lchash uchun — intervallar uchun System.nanoTime(), vaqt belgilari uchun System.currentTimeMillis() dan foydalaning (foydalanuvchi tuzatishlarini hisobga olgan holda)
  • Server bilan kelishuv — konvertatsiya xatolaridan qochish uchun API hujjatlarida har doim o‘lchov birliklarini (soniya yoki millisoniya) aniqlang

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing