Unix vaqti - Unix time

Joriy Unix vaqti
1607288941 (yangilash)
(2020-12-06T21: 09: 01 + 00: 00)
Unix vaqti o'tdi 1000000000 soniya 2001-09-09T01: 46: 40Z. Bu Daniyaning Kopengagen shahrida bo'lib o'tgan bayramda nishonlandi DKUUG (mahalliy vaqt bilan soat 03:46:40 da).

Unix vaqti (shuningdek, nomi bilan tanilgan Epoch vaqti, POSIX vaqti,[1] Epochdan beri soniya,[2] yoki UNIX Epoch vaqti[3]) tasvirlash tizimidir a vaqtni belgilash. Bu soni soniya dan beri o'tgan Unix epoxasi, minus bir necha soniya; Unix epoxasi 00:00:00 UTC 1970 yil 1 yanvarda (o'zboshimchalik bilan sana); pog'ona soniyalariga e'tibor berilmaydi,[4] sakrash sekundida uniks vaqtining oldingisidagi bilan bir xil bo'ladi va har kuni xuddi aynan o'z ichiga olganidek muomala qilinadi 86400 soniya.[2] Ushbu muolaja tufayli Unix vaqti UTC ning haqiqiy vakili emas.

Unix vaqti keng qo'llanilgan operatsion tizimlar va fayl formatlari. Yilda Unixga o'xshash operatsion tizimlar, sana joriy vaqtni bosib chiqaradigan yoki o'rnatadigan buyruq; sukut bo'yicha, u tizimdagi vaqtni bosib chiqaradi yoki o'rnatadi vaqt zonasi, lekin bilan -u bayroq, u vaqtni UTC-da bosib chiqaradi yoki o'rnatadi va TZ muhit o'zgaruvchisi ma'lum bir vaqt zonasiga murojaat qilish uchun o'rnatiladi, vaqt mintaqasini bosib chiqaradi yoki o'rnatadi.[5]

Ta'rif

Ikki qatlamli kodlash Unix vaqtini tashkil qiladi. Birinchi qavat vaqtni bir nuqtasini a sifatida kodlaydi skalar haqiqiy raqam bu 00:00:00 dan o'tgan soniyalar sonini ifodalaydi UTC 1970 yil 1-yanvar, payshanba.[6] Ikkinchi qavat bu raqamni bitlar yoki o'nli raqamlar ketma-ketligi sifatida kodlaydi.

UTC bilan odatdagidek, ushbu maqola Gregorian taqvimi, va har bir kun ichida soatlarni soat, daqiqa va soniyada hisoblaydi. Ba'zi bir misollar ham ko'rsatib turibdi Xalqaro atom vaqti (TAI), xuddi shu soniyalardan foydalanadigan va UTC bilan bir xil formatda namoyish etiladigan, ammo har kuni to'liq bo'lgan boshqa vaqt sxemasi 86400 soniya davom etadi, asta-sekin yutqazadi sinxronizatsiya yiliga taxminan bir soniya tezlikda Yerning aylanishi bilan.

Vaqtni raqam sifatida kodlash

Unix vaqti - bu har bir soniyada ko'payib boradigan bitta imzolangan raqam, bu an'anaviy sana tizimlariga qaraganda kompyuterlarning saqlashi va boshqarishlarini osonlashtiradi. Keyin tarjimon dasturlari uni odam tushunadigan formatga o'tkazishi mumkin.

The Unix davr soat 00:00:00 UTC 1970 yil 1-yanvarda.[2] Ushbu ta'rif bilan bog'liq muammo mavjud, chunki UTC 1972 yilgacha hozirgi shaklida mavjud emas edi; bu masala quyida muhokama qilinadi. Qisqa muddat uchun ushbu qismning qolgan qismi ishlatiladi ISO 8601 sana va vaqt formati, unda Unix davri 1970-01-01T00: 00: 00Z.

Unix vaqt raqami Unix davrida nolga teng va aynan oshib boradi 86400 davrdan beri kuniga. Shunday qilib 2004-09-16T00: 00: 00Z, 12677 davrdan keyingi kunlar Unix vaqt raqami bilan ifodalanadi 12677 × 86400 = 1095292800. Buni salbiy raqamlar yordamida ham davrdan orqaga qarab uzaytirish mumkin; shunday qilib 1957-10-04T00: 00: 00Z, 4472 davrdan bir necha kun oldin Unix vaqt raqami bilan ifodalanadi −4472 × 86400 = −386380800. Bu bir necha kun ichida ham amal qiladi; kunning istalgan vaqtidagi vaqt raqami - bu shu kecha boshlangan yarim tundan beri o'tgan yarim soniya, bu yarim tungi vaqt soniga qo'shilgan.

Unix vaqti bir davrga asoslanganligi sababli va Unix davri yagona davr (ko'pincha shunday deb nomlanadi) degan keng tarqalgan tushunmovchilik tufayliepoxa" [2]), Unix vaqti ba'zan deb nomlanadi Epoch vaqti.[7][8][9]

Bir necha soniya

Yuqoridagi sxema shuni anglatadiki, normal UTC kuni, davomiyligi 86400 soniya, Unix vaqt raqami a da o'zgaradi davomiy yarim tunda. Masalan, yuqoridagi misollarda ishlatilgan kun oxirida vaqt namoyishlari quyidagicha rivojlanadi:

Unix vaqti (2004 yil 17 sentyabr) yarim tunda (sekundiga sakrash yo'q)
TAI (2004 yil 17 sentyabr)UTC (2004 yil 16-17 sentyabr)Unix vaqti
2004-09-17T00: 00: 30.752004-09-16T23: 59: 58.751095379198.75
2004-09-17T00: 00: 31.002004-09-16T23: 59: 59.001095379199.00
2004-09-17T00: 00: 31.252004-09-16T23: 59: 59.251095379199.25
2004-09-17T00: 00: 31.502004-09-16T23: 59: 59.501095379199.50
2004-09-17T00: 00: 31.752004-09-16T23: 59: 59.751095379199.75
2004-09-17T00: 00: 32.002004-09-17T00: 00: 00.001095379200.00
2004-09-17T00: 00: 32.252004-09-17T00: 00: 00.251095379200.25
2004-09-17T00: 00: 32.502004-09-17T00: 00: 00.501095379200.50
2004-09-17T00: 00: 32.752004-09-17T00: 00: 00.751095379200.75
2004-09-17T00: 00: 33.002004-09-17T00: 00: 01.001095379201.00
2004-09-17T00: 00: 33.252004-09-17T00: 00: 01.251095379201.25

Qachon ikkinchi sakrash sodir bo'ladi, UTC kuni aniq emas 86400 soniya va Unix vaqt raqami (bu har doim aynan ko'payadi 86400 har kuni) tajribalar a uzilish. Lap soniyalar ijobiy yoki salbiy bo'lishi mumkin. Hech qanday salbiy sakrash haqida hech qachon e'lon qilinmagan, ammo agar shunday bo'lishi kerak bo'lsa, u holda salbiy sekund bilan kunning oxirida Unix vaqt raqami keyingi kunning boshiga 1 ga ko'tariladi. Taxminan har yarim yilda sodir bo'ladigan kunning oxirida ijobiy sakrash soniyasida, Unix vaqt raqami sakrash paytida keyingi kunga doimiy ravishda ko'payib boradi, so'ngra sakrash soniyasining oxirida 1 ga orqaga qaytadi. (keyingi kunning boshiga qaytish). Masalan, 1998 yil oxirida POSIX.1 tizimlariga to'liq mos keladigan narsa:

1999 yil 1 yanvardan yarim tungacha Unix vaqti (ijobiy sakrash soniyasi)
TAI (1999 yil 1-yanvar)UTC (1998 yil 31 dekabrdan 1999 yil 1 yanvargacha)Unix vaqti
1999-01-01T00: 00: 29.751998-12-31T23: 59: 58.75915148798.75
1999-01-01T00: 00: 30.001998-12-31T23: 59: 59.00915148799.00
1999-01-01T00: 00: 30.251998-12-31T23: 59: 59.25915148799.25
1999-01-01T00: 00: 30.501998-12-31T23: 59: 59.50915148799.50
1999-01-01T00: 00: 30.751998-12-31T23: 59: 59.75915148799.75
1999-01-01T00: 00: 31.001998-12-31T23: 59: 60.00915148800.00
1999-01-01T00: 00: 31.251998-12-31T23: 59: 60.25915148800.25
1999-01-01T00: 00: 31.501998-12-31T23: 59: 60.50915148800.50
1999-01-01T00: 00: 31.751998-12-31T23: 59: 60.75915148800.75
1999-01-01T00: 00: 32.001999-01-01T00: 00: 00.00915148800.00
1999-01-01T00: 00: 32.251999-01-01T00: 00: 00.25915148800.25
1999-01-01T00: 00: 32.501999-01-01T00: 00: 00.50915148800.50
1999-01-01T00: 00: 32.751999-01-01T00: 00: 00.75915148800.75
1999-01-01T00: 00: 33.001999-01-01T00: 00: 01.00915148801.00
1999-01-01T00: 00: 33.251999-01-01T00: 00: 01.25915148801.25

Unix vaqt raqamlari ijobiy sakrash soniyasidan so'ng darhol ikkinchi soniyada takrorlanadi. Unix vaqt raqami 1483142400 bu shunchaki noaniq: bir soniyadan keyin (sakrashning boshlanishi (2016-12-31 23:59:60) yoki oxiriga, bir soniyadan keyin (2017-01-01 00:00:00) murojaat qilishi mumkin. Nazariy vaziyatda salbiy sakrash sodir bo'lganda, noaniqlik bo'lmaydi, aksincha UTC vaqtining biron bir nuqtasiga murojaat qilmaydigan Unix vaqt raqamlari mavjud.

Unix soati ko'pincha bilan bog'liq bo'lgan ikkinchi darajali ijobiy sakrashning boshqa turi bilan amalga oshiriladi Tarmoq uchun vaqt protokoli (NTP). Bu POSIX standartiga mos kelmaydigan tizimni keltirib chiqaradi. Tafsilotlar uchun quyidagi NTP bilan bog'liq bo'limga qarang.

UTC sekundini qamrab olmaydigan davrlar bilan ishlashda, Unix vaqtining ikki raqamlari orasidagi farq vaqtning tegishli nuqtalari orasidagi davr soniyalaridagi davomiylikka teng. Bu keng tarqalgan hisoblash texnikasi. Biroq, sekundlar sodir bo'lgan joyda, bunday hisob-kitoblar noto'g'ri javob beradi. Ushbu aniqlik darajasi talab qilinadigan dasturlarda Unix vaqtlari bilan ishlashda sakrashlar jadvali bilan maslahatlashish zarur va ko'pincha bu muammoga duch kelmaydigan boshqa vaqt kodlashidan foydalanish afzalroqdir.

Unix vaqt raqami UTC vaqtiga osonlikcha Unix vaqt raqamining koeffitsienti va moduli, modulini olgan holda qaytariladi. 86400. Miqdor - bu davrdan keyingi kunlar soni va modul - bu o'sha kuni UTC yarim tundan beri soniyalar soni. Agar ijobiy soniya tufayli aniq bo'lmagan Unix vaqt raqami berilgan bo'lsa, bu algoritm uni yarim tundan keyingi vaqt sifatida izohlaydi. Bu hech qachon bir soniya ichida bo'lgan vaqtni yaratmaydi. Agar salbiy sekund tufayli yaroqsiz bo'lgan Unix vaqt raqami berilgan bo'lsa, u teng darajada bekor UTC vaqtini hosil qiladi. Agar ushbu shartlar muhim bo'lsa, ularni aniqlash uchun sekundlar jadvaliga murojaat qilish kerak.

Sinxron bo'lmagan Tarmoq vaqti protokoliga asoslangan variant

Odatda a Tegirmonlar -stili Unix soati Unix vaqt raqamining o'zgarishi bilan sinxron bo'lmagan ikkinchi sakrash bilan amalga oshiriladi. Vaqt raqami dastlab sakrash bo'lishi kerak bo'lgan joyda kamayadi va keyin sakrashdan 1 soniyadan keyin to'g'ri vaqtga sakrab chiqadi. Bu amalga oshirishni osonlashtiradi va Millsning qog'ozida tasvirlangan.[10] Bu ijobiy sakrash soniyasida sodir bo'ladi:

Sinxron bo'lmagan Mills uslubidagi Unix soati
1999 yil 1 yanvardan yarim tungacha (ijobiy sakrash ikkinchi)
TAI (1999 yil 1-yanvar)UTC (1998 yil 31 dekabrdan 1999 yil 1 yanvargacha)ShtatUnix soati
1999-01-01T00: 00: 29.751998-12-31T23: 59: 58.75TIME_INS915148798.75
1999-01-01T00: 00: 30.001998-12-31T23: 59: 59.00TIME_INS915148799.00
1999-01-01T00: 00: 30.251998-12-31T23: 59: 59.25TIME_INS915148799.25
1999-01-01T00: 00: 30.501998-12-31T23: 59: 59.50TIME_INS915148799.50
1999-01-01T00: 00: 30.751998-12-31T23: 59: 59.75TIME_INS915148799.75
1999-01-01T00: 00: 31.001998-12-31T23: 59: 60.00TIME_INS915148800.00
1999-01-01T00: 00: 31.251998-12-31T23: 59: 60.25TIME_OOP915148799.25
1999-01-01T00: 00: 31.501998-12-31T23: 59: 60.50TIME_OOP915148799.50
1999-01-01T00: 00: 31.751998-12-31T23: 59: 60.75TIME_OOP915148799.75
1999-01-01T00: 00: 32.001999-01-01T00: 00: 00.00TIME_OOP915148800.00
1999-01-01T00: 00: 32.251999-01-01T00: 00: 00.25TIME_WAIT915148800.25
1999-01-01T00: 00: 32.501999-01-01T00: 00: 00.50TIME_WAIT915148800.50
1999-01-01T00: 00: 32.751999-01-01T00: 00: 00.75TIME_WAIT915148800.75
1999-01-01T00: 00: 33.001999-01-01T00: 00: 01.00TIME_WAIT915148801.00
1999-01-01T00: 00: 33.251999-01-01T00: 00: 01.25TIME_WAIT915148801.25

Ikkinchi darajadagi o'zgaruvchiga e'tibor berish orqali buni to'g'ri dekodlash mumkin, bu esa sakrash hali bajarilganligini aniq ko'rsatib beradi. Vaziyat o'zgaruvchining o'zgarishi pog'ona bilan sinxronlashadi.

Shunga o'xshash vaziyat salbiy sakrash soniyasida paydo bo'ladi, bu erda o'tkazib yuborilgan soniya biroz kechikadi. Qisqacha aytganda tizim noma'lum vaqt raqamini ko'rsatadi, ammo buni buni aniqlash mumkin TIME_DEL davlat va tuzatilgan.

Ushbu turdagi tizimda Unix vaqt raqami soniyaning har ikkala turi atrofida POSIXni buzadi. Ikkinchi holat o'zgaruvchisini vaqt raqami bilan birga yig'ish birma-bir dekodlashga imkon beradi, shuning uchun kerakli POSIX vaqt raqamini hosil qilish mumkin yoki to'liq UTC vaqtini yanada mos formatda saqlash mumkin.

Unix soatining ushbu uslubi bilan kurashish uchun zarur bo'lgan dekodlash mantig'i, xuddi shu interfeys yordamida taxminiy POSIX-ga mos keladigan soatni to'g'ri dekodlashi mumkin edi. Bunga ko'rsatma orqali erishiladi TIME_INS kiritilgan soniyaning to'liq holatini, keyin ko'rsatib beradi TIME_WAIT butun soniya davomida, soniyani hisoblash takrorlanganda. Bu sinxron pog'ona ikkinchi ishlov berishni talab qiladi. Ehtimol, bu UTC vaqtini Unix interfeysi orqali, Unix interfeysi orqali ifodalashning eng yaxshi usuli, chunki asosiy soat bir necha soniya ichida muammosiz bo'lib qolganda.

TAI-ga asoslangan variant

Unix vaqtini saqlashning yana bir kamdan-kam uchraydigan va mos kelmaydigan varianti UTC o'rniga TAI kodlashni o'z ichiga oladi; ba'zi Linux tizimlari shu tarzda tuzilgan.[11] TAIda biron bir sakrash soniyasi bo'lmaganligi va har bir TAI kuni 86400 soniyani tashkil qilganligi sababli, bu kodlash aslida 1970-01-01T00: 00: 00 dan beri o'tgan sof chiziqli soniya hisoblanadi. TAI. Bu vaqt oralig'idagi arifmetikani ancha osonlashtiradi. Ushbu tizimlarning vaqt qiymatlari qat'iy mos keladigan POSIX tizimlari yoki NTP tomonidan boshqariladigan tizimlarning noaniqligiga duch kelmaydi.

Ushbu tizimlarda UTC va psevdo-Unix-time vakili o'rtasida to'g'ri konvertatsiya qilish uchun bir necha soniya jadvaliga murojaat qilish kerak. Bu vaqt zonasi jadvallariga o'tish va qaytish uchun murojaat qilish uslubiga o'xshaydi fuqarolik vaqti; The IANA vaqt zonasi ma'lumotlar bazasi ikkinchi darajali ma'lumotni o'z ichiga oladi va bir xil manbadan olingan namunaviy kod ushbu ma'lumotdan TAI asosida vaqt markalari va mahalliy vaqt o'rtasida konvertatsiya qilish uchun foydalanadi. Konvertatsiya shuningdek, UTC ning joriy shakli 1972 yil boshlanishidan oldin aniqlanadigan muammolarga duch keladi (bo'limga qarang UTC asosida quyida).

Ushbu TAI asosidagi tizim, uning yuzaki o'xshashligiga qaramay, Unix vaqti emas. U vaqtlarni POSIX vaqt qiymatlaridan bir necha soniya farq qiladigan qiymatlar bilan kodlaydi. Ushbu tizimning versiyasi ISO C-ga qo'shilishi uchun taklif qilingan vaqt.h, lekin faqat UTC qismi 2011 yilda qabul qilingan.[12] A tai_clock ammo, C ++ 20 da mavjud.

Raqamni ifodalaydi

Unix vaqt raqami raqamlarni ifodalashga qodir bo'lgan har qanday shaklda ifodalanishi mumkin. Ba'zi dasturlarda raqam oddiygina o'nlik raqamlar qatori sifatida ifodalanadi va bu shunchaki ahamiyatsiz qo'shimcha muammolarni keltirib chiqaradi. Shu bilan birga, Unix vaqtlarining ba'zi ikkilik namoyishlari ayniqsa muhimdir.

Unix vaqt_t vaqt nuqtasini ifodalaydigan ma'lumotlar turi, ko'p platformalarda, a imzolangan tamsayı, an'anaviy ravishda 32 yoshda bitlar (lekin quyida ko'rib chiqing), Unix vaqt raqamini to'g'ridan-to'g'ri oldingi qismida aytib o'tilganidek kodlash. 32 bit bo'lganligi, bu jami 136 yilni qamrab olishini anglatadi. Minimal vakolatli sana 1901-12-13 juma kunlari, va maksimal sana 2038-01-19 seshanba kunlari. 03:14:07 dan keyin bir soniya UTC 2038-01-19 ushbu vakolatxona bo'ladi toshib ketish. Ushbu muhim voqea o'yin-kulgi va qo'rquv aralashmasi bilan kutilmoqda - qarang 2038 yilgi muammo.

Ba'zi yangi operatsion tizimlarda, vaqt_t 64 bitgacha kengaytirildi. Bu ikki yo'nalishda taxminan 293 milliard yilni tashkil etadigan vaqtni kengaytiradi, bu hozirgi zamonning yigirma baravaridan ko'proqdir koinot asri yo'nalish bo'yicha.

Dastlab Unix-ning yo'qligi to'g'risida ba'zi tortishuvlar bo'lgan vaqt_t imzolangan yoki imzosiz bo'lishi kerak. Agar imzosiz bo'lsa, kelajakda uning diapazoni ikki baravarga oshib, 32-bitli to'ldirishni (68 yilga) qoldiradi. Biroq, keyinchalik bu davrga qadar bo'lgan vaqtni ifodalashga qodir emas. Konsensus uchun vaqt_t imzolanishi kerak va bu odatiy amaliyotdir. Ning 6-versiyasi uchun dasturiy ta'minotni ishlab chiqish platformasi QNX operatsion tizim imzosiz 32-bitga ega vaqt_t, ammo eski versiyalarda imzolangan tur ishlatilgan.

The POSIX va Guruhni oching Unix spetsifikatsiyalariga quyidagilar kiradi C standart kutubxonasi da belgilangan vaqt turlari va funktsiyalarni o'z ichiga oladi <time.h> sarlavha fayli. ISO C standartida ta'kidlangan vaqt_t arifmetik turi bo'lishi kerak, lekin u uchun biron bir aniq turni yoki kodlashni talab qilmaydi. POSIX talab qiladi vaqt_t tamsayı turi bo'lishi kerak, lekin imzolangan yoki imzosiz bo'lishi shart emas.

Unixda butun sonli bo'lmagan Unix vaqt raqamlarini ikkilik kasrlar sifatida to'g'ridan-to'g'ri namoyish etish an'anasi yo'q. Buning o'rniga sub-soniya aniqligi bo'lgan vaqtlar yordamida ifodalanadi kompozit ma'lumotlar turlari ikkita butun sondan iborat bo'lib, birinchisi a vaqt_t (Unix vaqtining ajralmas qismi), ikkinchisi vaqt sonining kasr qismi millioninchi qismda (yilda tarkibiy vaqt) yoki milliarddan bir qismi (yilda struct timespec).[13][14] Ushbu tuzilmalar a o‘nli kasr asoslangan belgilangan nuqta ma'lumotlar formati, bu ba'zi ilovalar uchun foydali, boshqalari uchun esa ahamiyatsiz.

UTC asosida

Bir necha soniya ichida UTCning hozirgi shakli faqat 1972 yil 1 yanvardan boshlab belgilanadi. Bungacha, 1961 yil 1 yanvardan boshlab UTC ning eski shakli mavjud bo'lib, unda nafaqat vaqti-vaqti bilan, balki butun sonli qadamlar ham bo'lgan. soniya sonlari, lekin UTC soniyasi SI soniyasidan bir oz ko'proq vaqtni tashkil etdi va vaqti-vaqti bilan Yerning doimiy aylanishiga qarab o'zgarib turdi. 1961 yilgacha UTC yo'q edi va 1958 yilgacha u erda keng tarqalmagan edi atom vaqtini saqlash; bu davrlarda, taxminan ba'zi GMT (to'g'ridan-to'g'ri Yerning aylanishiga asoslangan) atomik vaqt shkalasi o'rniga ishlatilgan.[iqtibos kerak ]

Unix vaqtining UTC kodlashi sifatida aniq ta'rifi hozirgi UTC shakliga nisbatan tortishuvsizdir. UTC shaklining boshlanishidan oldingi Unix davri uning bu davrda qo'llanilishiga ta'sir qilmaydi: 1970 yil 1 yanvardan (Unix epoxasi) 1972 yil 1 yanvargacha (UTC boshlanishi) kunlar soni shubha ostiga olinmaydi va kunlar soni Unix vaqti uchun muhim ahamiyatga ega.

Quyidagi Unix vaqt qiymatlarining ma'nosi +63072000 (ya'ni 1972 yil 1 yanvardan oldin) aniq belgilanmagan. Bunday Unix vaqtlarining asosini UTC-ning aniqlanmagan yaqinlashuvi yaxshiroq tushunadi. O'sha davrdagi kompyuterlar kamdan-kam hollarda har qanday holatda ham sub-soniya vaqt tamg'alarini ta'minlash uchun etarli darajada aniq o'rnatilgan. Unix vaqti ikkinchi soniyada aniqlikni talab qiladigan dasturlarda 1972 yilgacha bo'lgan vaqtni namoyish etishning mos usuli emas; bunday dasturlar, hech bo'lmaganda, UT yoki GMTning qaysi shaklidan foydalanilishini aniqlab olishlari kerak.

2009 yildan boshlab, fuqarolik vaqtidagi sakrash soniyalaridan foydalanishni tugatish imkoniyati ko'rib chiqilmoqda.[15] Ushbu o'zgarishlarni amalga oshirish uchun yangi vaqt o'lchovini aniqlash kerak bo'ladi Xalqaro vaqt, bu dastlab UTC bilan mos keladi, ammo keyinchalik biron bir soniya yo'q, shuning uchun TAI dan doimiy ofsetda qoladi. Agar shunday bo'ladigan bo'lsa, ehtimol UTC o'rniga Unix vaqti ushbu yangi vaqt ko'lami bo'yicha aniqlanadi. Bu sodir bo'ladimi-yo'qligi haqida noaniqlik Unix-ning istiqbolli vaqtini hozirgidan kam bo'lmagan darajada prognoz qiladi: agar UTC shunchaki sakrash soniyasiga ega bo'lmasa, natija bir xil bo'ladi.

Tarix

Unix vaqtining dastlabki versiyalari 32-bitli butun sonni 60 ga oshirishga ega ediHz, bu erta Unix tizimlari apparatidagi tizim soati tezligi edi. Natijada 60 Hz qiymati ba'zi dasturiy ta'minot interfeyslarida paydo bo'ladi. Davr ham hozirgi qiymatdan farq qildi. Unix dasturchisining 1971 yil 3-noyabrdagi birinchi nashrida Unix vaqti "1971 yil 1-yanvar soat 00:00 dan boshlab, soniyaning oltmishinchi qismida o'lchanadigan vaqt" deb ta'riflangan.[16]

Foydalanuvchilar uchun qo'llanmada, shuningdek, "xronologik fikr yurituvchi foydalanuvchi soniyaning 2 ** 32 oltmishinchi qismi atigi 2,5 yil ekanligini ta'kidlaydi", deb izoh bergan. Ushbu cheklangan diapazon tufayli, bu davr bir necha bor qayta aniqlangan edi, stavka 1 Hz ga o'zgartirilgunga qadar va davr hozirgi qiymatiga o'rnatilgunga qadar 1970 yil 1 yanvar soat 00:00:00 UTC. Bu taxminan 136 yilni tashkil etdi, uning yarmi 1970 yilgacha va yarmi keyin.

Yuqorida keltirilgan ta'rifda ko'rsatilgandek, Unix vaqt o'lchovi dastlab bir davrdan beri o'tgan vaqtni oddiy chiziqli tasviri sifatida yaratilgan. Biroq, vaqt o'lchovlari tafsilotlari ko'rib chiqilmagan va allaqachon mavjud va kelishilgan oddiy chiziqli vaqt o'lchovi mavjud deb taxmin qilingan. Birinchi nashr qo'llanmasining ta'rifida qaysi vaqt zonasidan foydalanilganligi ham ko'rsatilmagan. Bir necha keyingi muammolar, shu jumladan hozirgi ta'rifning murakkabligi, Unix vaqtidan kelib chiqib, boshidanoq to'liq aniqlanmagan, balki asta-sekin ishlatilgan.

Qachon POSIX.1 yozildi, qanday qilib aniq belgilash kerakligi haqida savol tug'ildi vaqt_t sakrash soniyalari oldida. POSIX qo'mitasi, Unix vaqti, belgilangan vaqtga ko'ra, sekundlar davomida chiziqli soniya bo'lib qolishi kerakmi, buni fuqarolik vaqti bilan konversiyalardagi murakkablik yoki fuqarolik vaqtining vakili hisobiga, pog'ona soniyalaridagi nomuvofiqlik hisobiga. Eramizning kompyuter soatlari etarlicha aniq o'rnatilmagan, chunki u yoki bu tarzda presedent hosil qilish uchun.

POSIX qo'mitasi kutubxona vazifalaridagi murakkablikka qarshi dalillarga duch keldi,[iqtibos kerak ] va UTC vaqtining elementlari bo'yicha Unix vaqtini sodda tarzda aniq belgilab qo'ydi. Ushbu ta'rif shu qadar sodda ediki, hatto butun narsani qamrab olmadi pog'ona yili Gregorian kalendarining qoidasi va 2100 yilni tashkil etadi.

POSIX.1 ning 2001 yildagi nashri Unix vaqtini belgilashda notog'ri o'tgan yil qoidasini tuzatdi, ammo Unix vaqtining aniq ta'rifini chiziqli vaqt o'lchovi o'rniga UTC kodi sifatida saqlab qoldi. 1990-yillarning o'rtalaridan boshlab kompyuter soatlari muntazam ravishda buning ahamiyati uchun etarli darajada aniqlik bilan o'rnatildi va ular eng ko'p UTC asosida Unix vaqtining ta'rifi yordamida o'rnatildi. Bu Unix dasturida juda murakkablikni keltirib chiqardi va Tarmoq uchun vaqt protokoli, sekundlar sodir bo'lganda Unix vaqt raqamidagi qadamlarni bajarish uchun.[iqtibos kerak ]

Unix vaqtidagi muhim voqealar

Unix ixlosmandlari "time_t party" ("vaqt" deb talaffuz qilingan) tarixga ega choy partiyalari ") Unix vaqt raqamining muhim qiymatlarini nishonlash.[17][18] Ular to'g'ridan-to'g'ri o'xshashdir Yangi yil ko'plab taqvimlarda yil o'zgarganda sodir bo'ladigan bayramlar. Unix vaqtidan foydalanish kengaya borgan sari, uning muhim bosqichlarini nishonlash amaliyoti ham kengaydi. Odatda bu dumaloq raqamlar bo'lgan vaqt qiymatlari o‘nli kasr Unix tomosha konventsiyasidan so'ng nishonlanadigan vaqt_t o'nlikdagi qiymatlar. Ba'zi guruhlar orasida davra ikkilik +2 kabi raqamlar ham nishonlanadi30 2004 yil 10-yanvar, shanba kuni UTC soat 13:37:04 da sodir bo'ldi.[iqtibos kerak ]

Ular nishonlaydigan voqealar odatda "N Unix davridan beri o'tgan soniyalar ", ammo bu noto'g'ri, yuqorida aytib o'tilganidek, Unix vaqtidagi sakrash soniyalari bilan ishlash tufayli Unix davridan beri o'tgan soniyalar soni Unix vaqtidan bir necha marta ko'proq vaqtga o'tib ketgan.

  • 1973 yil 17 oktyabr, chorshanba kuni UTC soat 18:36:57 da tarixning birinchi ko'rinishi ISO 8601 format[a] (1973-10-17) Unix vaqtining raqamlari ichida (119731017) bo'lib o'tdi.
  • 2001 yil 9-sentabr, yakshanba kuni UTC soat 01:46:40 da Unix billennium (Unix vaqt raqami) 1000000000) nishonlandi.[19] Ism milliard yil a portmanteau ning milliard va ming yillik.[20][21] Matn namoyishi yordamida vaqt tamg'alarini saqlagan ba'zi dasturlar, aylanmadan keyingi matn saralash vaqtlarida bo'lgani kabi, saralash xatolariga duch kelishdi. 1 a dan boshlanadigan oldingi vaqtlardan oldin xato bilan tartiblangan 9 raqam. Ta'sir qilingan dasturlar orasida ommabop dasturlar mavjud Usenet o'quvchi Tugun va elektron pochta mijoz KMail, qismi KDE ish stoli muhiti. Bunday xatolar odatda kosmetik xususiyatga ega edi va muammolar paydo bo'lgandan keyin tezda tuzatildi. Muammo ko'pchilikka ham ta'sir qildi Filtrix bilan ta'minlangan hujjat formatidagi filtrlar Linux versiyalari WordPerfect; foydalanuvchi hamjamiyati tomonidan ushbu muammoni hal qilish uchun yamoq yaratildi, chunki Corel endi dasturning ushbu versiyasini sotmaydi yoki qo'llab-quvvatlamaydi.[22]
  • 2009 yil 13 fevral, juma kuni UTC soat 23:31:30 da o‘nli kasr Unix vaqtining vakili bo'ldi 1234567890 soniya.[23] Google buni a bilan nishonladi Google doodle.[24] Bayramni nishonlash uchun butun dunyo bo'ylab turli xil texnik submulturalar orasida partiyalar va boshqa bayramlar bo'lib o'tdi 1234567890th ikkinchi.[17][25]
  • 2033 yil 18-may, chorshanba kuni UTC soat 03:33:20 da Unix vaqt qiymati tenglashadi 2000000000 soniya.
  • 2036 yil 7-fevral, payshanba kuni UTC soat 06:28:16 da, Tarmoq uchun vaqt protokoli keyingi davrga o'tadi, chunki NTP-da ishlatiladigan 32-bitli vaqt tamg'asi qiymati (imzosiz, ammo 1900 yil 1-yanvarga asoslanib) oshib ketadi. Ushbu sana keyingi sanaga yaqin, chunki 32-bitli soniya sonining 136 yillik diapazoni ikki davr o'rtasidagi 70 yillik ofsetning ikki baravariga yaqin.
  • 2038 yil 19-yanvar, seshanba kuni UTC soat 03:14:08 da Unix vaqt tamg'asining 32 bitli versiyalari ishlashni to'xtatadi, chunki u imzolangan 32 bitli raqamda ushlab turilishi mumkin bo'lgan eng katta qiymatdan oshib ketadi (7FFFFFFF16 yoki 2147483647 ). Ushbu vaqtgacha 32-bitli vaqt markalarini ishlatadigan dasturiy ta'minot vaqt markalari uchun yangi konventsiyani qabul qilishi kerak,[26] va 32-bitli vaqt markalarini ishlatadigan fayl formatlarini kattaroq vaqt markalarini yoki boshqa davrni qo'llab-quvvatlash uchun o'zgartirish kerak bo'ladi. O'zgarishsiz bo'lsa, keyingi soniya noto'g'ri juma kuni 20:45:52 deb talqin etiladi 13 dekabr 1901 UTC. Bu "deb nomlanadi 2038 yil muammo.
  • 2065 yil 24-yanvar, shanba kuni UTC soat 05:20:00 da Unix vaqt qiymati tenglashadi 3000000000 soniya.
  • 2106 yil 7-fevral, yakshanba kuni UTC soat 06:28:15 da Unix vaqti yetadi FFFFFFFF16 yoki 4294967295 32-bit imzosiz tamsayılarda vaqtni ushlab turadigan tizimlar uchun maksimal darajaga erishish mumkin bo'lgan soniya. Ushbu tizimlarning ba'zilari uchun keyingi soniya payshanba kuni 00:00:00 deb noto'g'ri talqin etiladi 1970 yil 1-yanvar UTC. Boshqa tizimlar oldindan aytib bo'lmaydigan natijalar bilan to'lib toshishi mumkin.[iqtibos kerak ]
  • 4-dekabr, yakshanba kuni UTC soat 15:30:08 da 292277026596,[27][28] Unix vaqt markasining 64-bitli versiyalari ishlashni to'xtatadi, chunki u imzolangan 64-bitli raqamda ushlab turilishi mumkin bo'lgan eng katta qiymatdan oshib ketadi. Bu deyarli 22 baravar ko'p koinotning hozirgi yoshi, bu 1.37×1010 yil (13,7 mlrd).

Adabiyot va kalendrikada

Vernor Vinge roman Osmondagi chuqurlik kelajakda ming yillar davomida kosmik parvarishlash tsivilizatsiyasini tasvirlab beradi va Unix davridan foydalanadi. "dasturchi-arxeolog "etuk kompyuter tizimlarida ishlatilishi mumkin bo'lgan kodlarni topish va saqlash uchun mas'ul, avvalambor, zamon degani, deb o'ylaydi odam avval Oyda yurgan, ammo keyin bu "insoniyatning birinchi kompyuter operatsion tizimlaridan 0 soniyasi" ekanligini tushunadi.[29]

Shuningdek qarang

Izohlar

  1. ^ ISO 8601 1988 yilda nashr etilganidan beri orqaga tortilgan.

Adabiyotlar

  1. ^ "Ochiq guruh bazasi texnik xususiyatlari 7-son, asos: asos ta'riflari, bo'lim A.4 umumiy tushunchalar". Ochiq guruh. Olingan 9 sentyabr 2019.
  2. ^ a b v d "Ochiq guruh bazasi texnik xususiyatlari 7-son, 4.16-bo'lim, bu davrdan beri bir soniya". Ochiq guruh. Olingan 22 yanvar 2017.
  3. ^ Metyu, Nil; Stones, Richard (2008). "Linux muhiti". Linux dasturlashni boshlash. Indianapolis, Indiana, AQSh: Uili. p. 148. ISBN  978-0-470-14762-7.
  4. ^ "Ochiq guruh bazasi spetsifikatsiyasi 7-son, asos, 4.16-bo'lim, bu davrdan beri". OpenGroup. Olingan 22 yanvar 2017.
  5. ^ sana - Buyruqlar va yordam dasturlari ma'lumotnomasi, Yagona UNIX spetsifikatsiyasi, 7-son Ochiq guruh
  6. ^ "Epoch Converter - Unix Timestamp Converter". Epoch Converter. Olingan 12 yanvar 2020.
  7. ^ "Yorliqlarda format sana yordamida vaqt tamg'alarini boshqarish". Apple Inc. Olingan 19 iyun 2019.
  8. ^ "CSV-da eksport qilingan hisobotlarda RAW sana formati". International Business Machines Corporation (IBM). Olingan 19 iyun 2019.
  9. ^ "TIMESTAMP BY (Azure Stream Analytics)". Microsoft korporatsiyasi. Olingan 19 iyun 2019.
  10. ^ Mills, Devid L. (2012 yil 12-may). "NTP vaqt o'lchovi va sekundlar". eecis.udel.edu. Olingan 21 avgust 2017.
  11. ^ "Vaqt o'lchovlari". Tarmoq vaqt protokoli Wiki. 24 iyul 2019. Olingan 12 yanvar 2020.
  12. ^ Markus Kun. "ISO C uchun zamonaviylashtirilgan API". www.cl.cam.ac.uk.
  13. ^ "timespec". NetBSD qo'llanma sahifalari. 2011 yil 12 aprel. Olingan 5 iyul 2019.
  14. ^ "time.h (0P)". Linux qo'llanma sahifasi. Olingan 5 iyul 2019.
  15. ^ Makkarti, D. D.; Seidelmann, P. K. (2009). Vaqt - Yerning aylanishidan atom fizikasigacha. Weinheim: Wiley-VCH Verlag GmbH & Co. KGaA. p. 232. ISBN  978-3-527-40780-4.
  16. ^ Unix dasturchisining qo'llanmasi (PDF) (1-nashr). 1971 yil 3-noyabr. Olingan 28 mart 2012. vaqt 1971 yil 1-yanvar soat 00:00:00 dan boshlab, soniyaning oltmishinchi qismida o'lchangan vaqtni qaytaradi.
  17. ^ a b Tveni, Dilan (2009 yil 12 fevral). "Unixni sevuvchilar 1234567890 kabi ziyofatga". Simli.
  18. ^ "Slashdot | sana +% s burilib 1111111111". 2005 yil 17 mart.[ishonchli manba? ]
  19. ^ "Unix time faktlari va trivia - Unix Time. Ma'lumot".. Arxivlandi asl nusxasi 2017 yil 27 oktyabrda.
  20. ^ "UNIX bir milliardning etuk yoshiga yaqinlashmoqda". Elektromagnit.net. Arxivlandi asl nusxasi 2013 yil 13 aprelda. Olingan 6 dekabr 2012.
  21. ^ "Xatarlar hazm qilishning 21-jildi: 69-son". Catless.ncl.ac.uk. Olingan 6 dekabr 2012.
  22. ^ "Texnik muammolar". linuxmafia.com. Olingan 21 avgust 2017.
  23. ^ nixCraft. "Hazil: 2009 yil 13 fevral, juma kuni Unix vaqti 1234567890 bo'ladi". Cyberciti.biz. Olingan 6 dekabr 2012.
  24. ^ "Google 1234567890 logotipi". Google Inc. Olingan 28 yanvar 2013.
  25. ^ Ahmed, Murod (2009 yil 13 fevral). "Uchinchi zarbada Unix vaqti 1234567890 bo'ladi". The Times.
  26. ^ "Unix Time Stamp.com". UnixTimeStamp.com. Olingan 12 yanvar 2020.
  27. ^ Spinellis, Diomidis (2006 yil 7 aprel). Kod sifati: ochiq manbalar istiqbollari. ISBN  9780321166074.
  28. ^ IDRBT ishchi hujjati № 9 Y2K38 - Ashutosh Saxena va Sanjay Ravat
  29. ^ Mashey, Jon R. (2004 yil 27-dekabr). "Tillar, darajalar, kutubxonalar va uzoq umr". Navbat. 2 (9): 32–38. doi:10.1145/1039511.1039532. S2CID  28911378.

Tashqi havolalar