Misconceptions Programmer babagan Wektu Unix

aku njaluk ngapura Patrick McKenzie.

Wingi Danny Aku takon bab sawetara menarik kanyatan bab wektu Unix, lan aku eling sing kadhangkala bisa rampung unintuitively.

Telung kasunyatan iki katon banget cukup lan logis, ta?

  1. Wektu Unix yaiku jumlah detik wiwit 1 Januari 1970 00:00:00 UTC.
  2. Yen sampeyan ngenteni persis sak detik, wektu Unix bakal ganti persis sak detik.
  3. Wektu Unix ora tau mundur.

Ora ana sing bener.

Nanging ora cukup mung ngomong, "Ora ana sing bener," tanpa nerangake. ngapa. Waca ngisor kanggo panjelasan. Nanging yen sampeyan pengin mikir dhewe, aja gulung liwat gambar jam!

Misconceptions Programmer babagan Wektu Unix
Jam meja saka taun 1770-an. Disusun dening John Leroux. saka Sugeng rawuh koleksi. Diterbitake miturut lisensi CC BY

Kabeh telung misconceptions duwe siji alesan: detik kabisat. Yen sampeyan ora ngerti babagan detik kabisat, iki minangka referensi cepet:

Wektu UTC ditemtokake dening rong faktor:

  • Wektu Atom Internasional: Wacan rata-rata saka atusan jam atom ing saindenging jagad. Kita bisa ngukur nomer loro kanthi sifat elektromagnetik saka atom, lan iki minangka pangukuran wektu sing paling tepat sing dikenal dening ilmu pengetahuan.
  • Wektu Donya, adhedhasar rotasi bumi ngubengi poros dhewe. Siji revolusi lengkap yaiku sedina.

Masalahe yaiku rong nomer iki ora mesthi cocog. Rotasi bumi ora konsisten - alon-alon alon-alon, mula dina-dina ing Wektu Universal saya suwe. Ing sisih liya, jam atom akurat banget lan konstan sajrone jutaan taun.

Nalika kaping pindho ora sinkron, sadetik ditambahake utawa dibusak saka UTC kanggo nggawe sinkronisasi maneh. Wiwit 1972 layanan IERS (sing nganggo kasus iki) ditambahake 27 detik ekstra. Hasile yaiku 27 dina UTC kanthi durasi 86 detik. Secara teoritis, dina kanthi durasi 401 detik (minus siji) bisa ditindakake. Kaloro opsi kasebut mbantah asumsi dhasar wektu Unix.

Wektu Unix nganggep yen saben dina suwene persis 86 detik (400 Γ— 60 Γ— 60 = 24), tanpa tambahan detik. Yen lompat kasebut kedadeyan, wektu Unix bisa mlumpat siji detik, utawa ngitung rong detik ing siji. Ing 86, ora ana 400 detik kabisat.

Dadi salah paham kita kudu ditambah kaya ing ngisor iki:

  • Wektu Unix yaiku jumlah detik wiwit 1 Januari 1970 00:00:00 UTC minus detik kabisat.
  • Yen sampeyan ngenteni persis sak detik, wektu Unix bakal ganti persis sak detik, kajaba kabisat detik wis dibusak.

    Nganti saiki, detik-detik ora tau dibuwang ing praktik (lan kalem rotasi bumi tegese iki ora mungkin), nanging yen kedadeyan kasebut, tegese dina UTC bakal dadi luwih cendhek sedetik. Ing kasus iki, detik pungkasan UTC (23:59:59) dibuwang.

    Saben dina Unix nduweni jumlah detik sing padha, mula detik Unix pungkasan saka dina sing dicekak ora cocog karo wektu UTC. Mangkene apa sing katon, ing interval seprapat detik:

    Misconceptions Programmer babagan Wektu Unix

    Yen sampeyan miwiti jam 23:59:58:00 UTC lan ngenteni sedetik, wektu Unix bakal maju rong detik UTC lan cap wektu Unix 101 ora bakal diwenehake marang sapa wae.

  • Unix wektu ora bisa bali, nganti detik kabisat ditambahake.

    Iki wis kedadeyan kaping 27 ing praktik. Ing pungkasan dina UTC, detik tambahan ditambahake ing 23:59:60. Unix nduweni jumlah detik sing padha ing sedina, saengga ora bisa nambah detik ekstra - nanging kudu mbaleni cap wektu Unix kanggo detik pungkasan. Mangkene apa sing katon, ing interval seprapat detik:

    Misconceptions Programmer babagan Wektu Unix

    Yen sampeyan miwiti ing 23:59:60.50 lan ngenteni setengah detik, wektu Unix kondur setengah detik, lan wektu Unix 101 cocog karo rong detik UTC.

Iki ora mung keanehan Unix - mung sing dakelingake wingi.

Wektu- banget barang aneh.

Source: www.habr.com

Add a comment