би уучлалт гуйж байна
Өчигдөр
Энэ гурван баримт туйлын үндэслэлтэй бөгөөд логиктой мэт санагдаж байна, тийм үү?
- Unix цаг нь 1 оны 1970-р сарын 00:00:00 UTC-ээс хойшхи секундын тоо юм.
- Хэрэв та яг нэг секунд хүлээвэл Юниксийн цаг яг нэг секундээр өөрчлөгдөнө.
- Unix цаг хэзээ ч ухрахгүй.
Эдгээрийн аль нь ч үнэн биш.
Гэхдээ тайлбарлахгүйгээр зүгээр л "энэ нь үнэн биш" гэж хэлэх нь хангалтгүй юм. яагаад. Тайлбарыг доороос үзнэ үү. Гэхдээ хэрэв та өөрийнхөөрөө бодохыг хүсч байвал цагны зургийг гүйлгэж болохгүй!
1770-аад оны ширээний цаг. Эмхэтгэсэн: Жон Леру. -аас
Гурван буруу ойлголт бүгд нэг шалтгаантай:
UTC цагийг хоёр хүчин зүйлээр тодорхойлно:
Олон улсын атомын цаг : Дэлхий даяарх хэдэн зуун атомын цагны дундаж уншилтууд. Бид хоёр дахь нь атомын цахилгаан соронзон шинж чанараар хэмжиж болох бөгөөд энэ нь шинжлэх ухаанд мэдэгдэж буй цаг хугацааны хамгийн нарийн хэмжүүр юм.Дэлхийн цаг , дэлхийн өөрийн тэнхлэгийг тойрон эргэхэд үндэслэсэн. Нэг бүтэн хувьсгал бол нэг өдөр.
Асуудал нь эдгээр хоёр тоо үргэлж таарч байдаггүй. Дэлхийн эргэлт тогтмол биш - энэ нь аажмаар удааширдаг тул Орчлон ертөнцийн өдрүүд уртасдаг. Нөгөөтэйгүүр, атомын цаг нь чөтгөрийн үнэн зөв бөгөөд олон сая жилийн туршид тогтмол байдаг.
Хоёр удаа синхрончлолгүй болох үед тэдгээрийг дахин синхрончлохын тулд UTC-ээс секунд нэмж эсвэл хасдаг. 1972 оноос хойш үйлчилгээ
Unix цаг нь өдөр бүр яг 86 секунд (400 × 60 × 60 = 24) үргэлжилдэг гэж үздэг бөгөөд нэмэлт секунд байхгүй. Хэрэв ийм үсрэлт тохиолдвол Unix цаг нэг секундээр үсрэх эсвэл нэг секундэд хоёр секунд тоолно. 86 оны байдлаар 400 харайх секунд дутуу байна.
Тиймээс бидний буруу ойлголтыг дараах байдлаар нөхөх шаардлагатай байна.
- Unix цаг нь 1 оны 1970-р сарын 00-ний 00:00:XNUMX UTC-ээс хойшхи секундын тоо юм. хасах үсрэлт секунд.
- Хэрэв та яг нэг секунд хүлээвэл Unix цаг яг нэг секундээр өөрчлөгдөнө. үсрэлт секундийг хасаагүй бол.
Өнөөг хүртэл секундийг практикт хэзээ ч устгаагүй (мөн дэлхийн эргэлт удааширч байгаа нь энэ нь боломжгүй гэсэн үг) боловч хэрэв ийм зүйл тохиолдвол UTC өдөр нэг секундээр богиносох болно гэсэн үг юм. Энэ тохиолдолд UTC-ийн сүүлийн секунд (23:59:59) хасагдана.
Unix өдөр бүр ижил тооны секундтэй байдаг тул богиносгосон өдрийн сүүлийн Unix секунд нь UTC цагтай тохирохгүй. Энэ нь дөрөвний нэг секундын интервалаар дараах байдалтай байна.
Хэрэв та UTC-ийн 23:59:58:00 цагт эхэлж нэг секунд хүлээх юм бол Unix цаг хоёр UTC секундээр урагшлах ба Unix 101 цагийн тэмдэг нь хэнд ч олгогдохгүй. - Unix цаг хэзээ ч буцаж чадахгүй, үсрэлт секунд нэмэгдэх хүртэл.
Энэ нь практикт аль хэдийн 27 удаа тохиолдсон. UTC өдрийн төгсгөлд 23:59:60 цагт нэмэлт секунд нэмэгдэнэ. Unix нь өдөрт ижил тооны секундтэй байдаг тул нэмэлт секунд нэмэх боломжгүй - үүний оронд сүүлийн секундэд Unix цагийн тэмдэглэгээг давтах ёстой. Энэ нь дөрөвний нэг секундын интервалаар дараах байдалтай байна.
Хэрэв та 23:59:60.50 цагт эхэлж хагас секунд хүлээвэл Юникс цаг буцаж ирдэг хагас секундээр, Unix 101 цагийн тэмдэг нь хоёр UTC секундтэй тохирч байна.
Эдгээр нь Юниксийн үеийн цорын ганц хачирхалтай зүйл биш байж магадгүй - өчигдөр миний санаж байсан зүйл юм.
Цаг хугацаа - маш их хачирхалтай зүйл.
Эх сурвалж: www.habr.com