← Barcha vositalar

Unix Vaqt Belgisi O'tkazgichi

Unix vaqt belgilarini brauzeringizda bir zumda sanaga va aksincha o'tkazing. Epoch vaqti, soniya va millisoniyalar, UTC xatoliklari va 2038-yil muammosini bilib oling.

Unix vaqt belgilari — bosh og'rig'isiz

Uchta dasturchidan soat nechchi ekanini so'rang — ehtimol qayerda o'tirganiga qarab uchta javob olasiz. Unix vaqt belgisidan so'rang — aynan bitta son olasiz, sayyoradagi hamma uchun bir xil. Aynan shu yagona butun son har qanday jurnal fayli, ma'lumotlar bazasi qatori va siz duch keladigan API javobining tagida jimgina yotadi. Ushbu sahifa o'sha sonning nimani anglatishini, uni ikkala yo'nalishda qanday o'qishni va u qayerda odamlarni chalg'itishga moyilligini tushuntiradi.

Porlab turgan soat yorug'lik-raqamlar oqimiga aylanib eriyapti, Unix epoch vaqtini ifodalaydi
Epoch vaqti — 1970 yildan beri oldinga tiktayotgan yagona hisoblagich.

Unix vaqti aslida nima

Unix vaqt belgisi — 1970 yil 1 yanvar, soat 00:00:00 UTC dan beri o'tgan soniyalar soni, sakrash soniyalarini hisobga olmagan holda. O'sha payt epoch deb ataladi, va u dastlabki Unix muhandislari tomonidan shunchaki hisoblashni boshlash uchun qulay dumaloq sana bo'lgani sababli tanlangan. Epochda qiymat aynan 0. O'shandan beri har bir soniya bittani qo'shadi, shuning uchun son faqat o'sadi. 1970 yildan oldingi sanalar ham, manfiy butun sonlar sifatida ifodalanib, mutlaqo yaroqli hisoblanadi.

Siz bu tushunchani POSIX vaqti yoki, erkin ma'noda, epoch vaqti deb ham eshitasiz. Nom qanday bo'lishidan qat'iy nazar, mexanika bir xil: bitta doim o'sib boruvchi soniyalar hisoblagichi. Bu formatlangan satr emas, oddiy butun son bo'lgani uchun, kompyuter uni bir necha baytda saqlashi va ikkitasini bitta ayirish amali bilan solishtirishi mumkin.

Soniyalar, millisoniyalar va boshqalar

Klassik Unix vaqti butun soniyalarni hisoblaydi, bu esa bugun ko'radigan tanish o'n xonali sonni beradi. Lekin ko'plab muhitlarga aniqroq aniqlik kerak. Masalan, JavaScript millisoniyalarda ishlaydi, o'n uch xonali qiymat hosil qiladi, va ba'zi tizimlar mikrosoniyalar yoki nanosoniyalarga ham chuqurroq kiradi. Ishonchli qoida: o'n xonali son — soniyalar, o'n uch xonali son — millisoniyalar. Agar aylantirilgan sanangiz bugungi kunni kutgan bo'lsangiz-u, 1970 yil atrofiga tushib qolsa, siz deyarli aniq millisoniyalarni soniyalar maydoniga bergansiz, yoxud aksincha. Bizning konvertorimiz kattalikni avtomatik aniqlaydi, shuning uchun siz kamdan-kam taxmin qilishga majbur bo'lasiz.

Nega dasturchilar unga tayanadi

Eng katta yutuq — vaqt belgisi vaqt zonasidan mustaqil. 1735689600 butun soni Tokio, Berlin va San-Paulu uchun bir xil lahzaga ishora qiladi. Formatlangan lokal satr o'rniga shu sonni saqlash qiymat qaysi soatga tegishli ekanligi haqida hech qachon o'ylashingizga hojat qoldirmaydi. Saralash ham juda oddiy, chunki xronologik tartib shunchaki sonli tartib, shuning uchun vaqt belgisi ustunidagi ma'lumotlar bazasi indeksi hodisalarni hech qanday tahlil qilishsiz to'g'ri saralaydi. Arifmetika ham xuddi shunday toza: ikki hodisa orasidagi farq — bitta ayirish, bir kun qo'shish esa 86400 qo'shish degani. Aynan shu xususiyatlar jurnallar, tokenlar, keshlar va xabar navbatlari epoch vaqtiga murojaat qilishining sababidir.

Ikkala yo'nalishda aylantirish

Vaqt belgisidan inson sanasiga o'tish soniyalar hisobini kalendar ustiga proyeksiya qilib, so'ng buni qiziqtirgan har qanday vaqt zonasida formatlash degani. Teskari yo'nalishda esa yil, oy, kun va vaqtni olasiz, u qaysi vaqt zonasida ifodalanganini hal qilasiz va uni epochdan beri soniyalarga qaytarib yig'asiz. Bizning vositamiz ikkala yo'nalishni ham darhol va to'liq brauzeringizda bajaradi, shuning uchun joylashtirgan hech narsangiz qurilmangizdan chiqib ketmaydi. Uni dekodlash uchun son joylashtiring, yoki kodlash uchun sana tanlang, va natijani bir vaqtning o'zida ham UTC'da, ham lokal vaqtingizda o'qing.

Porlab turgan vaqt chizig'i lentasi, epoch soniyalari oqimi bo'ylab suzayotgan belgi bilan
Bitta chiziqda bitta belgi, ham UTC, ham lokal vaqt sifatida o'qilishi mumkin.

UTC va lokal vaqt — klassik tuzoq

Vaqt belgisining o'zida vaqt zonasi yo'q; u doim UTC'ga bog'langan. Chalkashlik faqat siz uni ko'rsatganingizda paydo bo'ladi. Agar 1700000000ni aylantirsangiz-u, ekraningizda kechki soat ko'rinsa, boshqa mamlakatdagi hamkasbingiz esa tushdan keyingi soatni ko'rsa — hech narsa buzilmagan, siz ikkalangiz ham xuddi shu lahzani turli lokal soatlarda ko'rsatilgan holda ko'ryapsiz. Xatolar kod lokal sanani xuddi u UTC bo'lgandek o'qiganida yoki siljishni yozib qo'ymasdan devor soati vaqtini belgilaganida paydo bo'ladi. Xavfsiz odat — UTC'ni saqlash va uzatish, va lokal siljishni faqat qiymatni odamga ko'rsatayotgan eng oxirgi lahzada qo'llash. Shubha bo'lsa, konvertordagi lokal qatoringiz o'rniga UTC qatorini solishtiring.

2038 yil muammosi

Ko'plab eski tizimlar Unix vaqtini ishorali 32-bitli butun sonda saqlagan. Bu maydon 2038 yil 19 yanvar soat 03:14:07 UTC'dan bir soniya keyin joy qolmay qoladi, hisoblagich to'lib toshadi va manfiy songa aylanib qoladi, potentsial ravishda sanalarni 1901 yilga qaytarib yuborishi mumkin. Bu Y2K bilan bir xil turdagi muammo. Yaxshi xabar shuki, zamonaviy operatsion tizimlar va tillar asosan 64-bitli vaqt belgilariga o'tgan, ular taxminan 292 milliard yil davomida to'lib toshmaydi, shuning uchun yangi kod uchun bu favqulodda vaziyat emas, ko'proq bilishga arzigulik tarixiy qiziqarli fakt.

Ko'proq brauzerga asoslangan yordamchi vositalar uchun dasturchi vositalarimizni ko'ring, va sonlarning o'zi bilan ishlash kerak bo'lsa, kalkulyatorlar bir bosish narida.

Tez-tez so'raladigan savollar

Unix vaqt belgisi nima?

Bu 1970 yil 1 yanvar soat 00:00:00 UTC'dan beri o'tgan soniyalar soni, sakrash soniyalarini hisobga olmagan holda. O'sha boshlang'ich lahza epoch deb ataladi, va hisob faqat vaqt o'tishi bilan ortib boradi.

Nega sonim 1970 yilga yaqin sanaga aylanadi?

Ehtimol siz soniyalar va millisoniyalarni chalkashtirib yuborgansiz. O'n xonali son — soniyalar, o'n uch xonali son — millisoniyalar. Millisoniyalarni soniyalar maydoniga berish taxminiy vaqtni taxminan mingga bo'lib, sizni epochga yaqinlashtiradi.

Unix vaqt belgisida vaqt zonasi bormi?

Yo'q. Qiymat doim UTC'ga bog'langan. Vaqt zonasi faqat vaqt belgisini inson o'qiy oladigan sana sifatida ko'rsatganingizda ishga tushadi, aynan shuning uchun bir xil son turli odamlar uchun turli devor soati vaqtlarini ko'rsatishi mumkin.

Sanani vaqt belgisiga qanday qaytarib aylantiraman?

Yil, oy, kun va vaqtni bering, o'sha sana qaysi vaqt zonasida ifodalanganini hal qiling, va vosita uni epochdan beri soniyalarga yig'ib qo'yadi. Ikkala yo'nalishni ham ushbu sahifada darhol, brauzeringizda bajarishingiz mumkin.

2038 yil muammosi nima?

Unix vaqtini ishorali 32-bitli butun sonda saqlaydigan tizimlar 2038 yil 19 yanvar soat 03:14:07 UTC'dan bir soniya keyin to'lib toshadi. Zamonaviy 64-bitli vaqt belgilari bundan milliardlab yillar davomida qochadi, shuning uchun ko'pchilik hozirgi dasturiy ta'minot buning ta'siriga uchramaydi.

Ma'lumotim serverga yuboriladimi?

Yo'q. Aylantirish to'liq brauzeringizda amalga oshiriladi, shuning uchun siz joylashtirgan har qanday vaqt belgisi yoki sana o'z qurilmangizda qoladi.