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 (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.
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 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.
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.
// 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 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.
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.
// 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 (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.
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 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.
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.
// 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 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.
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 formati | Hajm | Saralash | Indekslash |
|---|---|---|---|
| Unix Timestamp (INTEGER) | 4–8 bayt | Tez | Samarali |
| ISO 8601 (TEXT) | 20–30 bayt | Sekin | O‘rta |
| DATETIME (SQLite) | 8 bayt | O‘rta | O‘rta |
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 — 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.
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 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.
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 — 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
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.