Masa Unix dan penulisan ISO 8601
Unit di luar SI · kuantiti: suatu detik masa sebagai integer saat sejak 1970
Pada 19 Januari 2038, pukul tiga lebih empat belas minit tujuh saat waktu sejagat, sebuah pengira saat selebar tiga puluh dua bit akan sampai ke 2 147 483 647 — nombor terbesar yang termuat olehnya. Detik jam berikutnya akan mengangkat bit tertinggi, dan perkataan perduaan yang sama itu mulai saat itu dibaca sebagai negatif: jam yang menyimpan masa dengan kiraan inilah akan mendapati dirinya bukan pada 2038, tetapi pada Disember 1901. Ini bukan keanehan masa depan yang jauh — sebuah pengawal industri atau meter air bertahan lebih lama daripada dua belas tahun yang tinggal.
Kiraan ini dibina sesederhana mungkin: saat berjalan berturut-turut sejak tengah malam 1 Januari 1970, dan sehari di dalamnya sentiasa memuat tepat 86 400 saat. Kesederhanaan itulah punca kedua-dua sifatnya yang khas. Di satu pihak, daripada nombor itu terus terbit tarikh takwim dan sebaliknya, sehingga setiap log peristiwa, setiap pangkalan data dan setiap sistem fail menyimpan masa dengannya. Di pihak lain, saat lompat sama sekali tidak dapat dinyatakan dalam kiraan sedemikian, ertinya, bertentangan dengan namanya, ia menomborkan bukan saat melainkan hari berserta pecahannya, dan sebenarnya ialah fungsi linear bagi penulisan UTC, bukan pengira masa yang telah berlalu.
01 · Definisi
Masa Unix ialah bilangan saat yang telah berlalu sejak tengah malam 1 Januari 1970 waktu sejagat terselaras, dengan syarat setiap hari memuat tepat 86 400 saat. Penulisan ISO 8601 menyatakan perkara yang sama dengan cara lain: dengan tarikh takwim, waktu pada hari itu dan penunjukan sisihan daripada meridian sifar, manakala medan-medannya berjalan tegas dari kasar ke halus.
Syarat 86 400 saat itu bukan perkara remeh, melainkan yang paling penting dalam takrif. Saat lompat, yang diumumkan oleh perkhidmatan putaran Bumi, tidak dapat ditampung oleh kiraan ini, dan kerana itu pada detik sisipan sistem sama ada mengulang satu nilai yang sama dua kali, atau mengundurkan jam. Daripada ini menyusul perkara penting: beza dua nombor unix bukanlah bilangan saat yang benar-benar berlalu antara dua peristiwa, jika di antaranya jatuh satu sisipan — sisihan daripada skala atom sudah bertimbun sehingga dua puluh tujuh saat.
Adapun hadnya tidak bergantung pada takrif, melainkan pada lebar penyimpanan. Tiga puluh dua bit bertanda memberikan nilai terbesar 2 147 483 647, yang jatuh pada 19 Januari 2038; tambahan berikutnya menjadikan bit tertinggi satu dan menjadikan nombor itu negatif, melontarkan jam ke 13 Disember 1901. Enam puluh empat bit menolak sempadan itu ke hadapan sebanyak dua ratus sembilan puluh dua bilion tahun, namun nanosaat bulat dalam enam puluh empat bit yang sama itu justeru habis sudah pada 2262.
Penulisan menurut piawai menyelesaikan tugas yang lain — pertukaran, bukan penyimpanan — dan kerana itu di dalamnya berat perkara yang langsung tidak dimiliki nombor: sisihan jam, pemisah antara tarikh dan waktu, serta peraturan bahawa pada panjang rentetan yang sama tertib abjad bertepatan dengan tertib masa. Sifat yang akhir inilah yang menjadikan format tersebut asas penyusunan dalam nama fail dan dalam log.
Bawalah masa dengan penggelongsor dan perhatikan bagaimana daftar terisi: bit menyala dari kanan ke kiri, dan selagi yang tertinggi, bit tanda, masih gelap, nombor itu positif dan tarikh terus bertambah. Sebaik pengira melangkaui 2 147 483 647, bit tertinggi menyala merah, seluruh nombor menjadi negatif, dan jam melompat ke 1901.
Garis lurus hijau ialah skala atom, tempat setiap saat memang benar-benar satu saat. Garis merah bertangga ialah masa Unix, yang pada setiap sisipan mengeluarkan satu cap yang sama dua kali, lalu garis itu terhenti di tempatnya. Sisihan kini sudah dua puluh tujuh saat dan terus bertambah, kerana itu kiraan ini berguna untuk tarikh takwim, tetapi bukan untuk mengukur tempoh dalam fizik.
02 · Konversi
Masukkan cap masa atau tarikh
Antara semua gandaan kiraan — saat, milisaat, mikrosaat dan nanosaat — penukarannya tepat, kerana kesemuanya hanya berbeza satu pendarab. Yang menghampiri hanyalah satu baris: penukaran kepada skala atom menuntut kita mengetahui berapa banyak saat lompat telah bertimbun sehingga detik yang diberikan.
Penghuraian rentetan menurut piawai dilakukan oleh helaian ini dalam penulisan diperluas berhuruf Z; bentuk asas tanpa pemisah dipindahkan ke tetapan halus.
Masalah tahun 2038 bukan terletak pada piawai, melainkan pada perkakasan dan pada kod lama: cap tiga puluh dua bit bertapak dalam perisian tegar meter, dalam pengawal industri, dalam format sistem fail, dan dalam pangkalan data yang medannya sudah diisytiharkan empat bait. Menukar jenis dalam sumbernya cukup mudah; tetapi menyusuri berjuta-juta peranti yang telah dipasang dalam dua belas tahun yang tinggal ialah tugas sejenis dengan yang terbentang sebelum tahun 2000.
| Nilai | Catatan | ||
|---|---|---|---|
| {u} | {name} | {value} | {note} |
03 · Orde besaran
skala logaritma: dari satu saat hingga had enam puluh empat bit04 · Alat ukur
Dengan apa suatu peristiwa dicap masanya
Sekeping cip berasingan berbateri, yang meneruskan kiraan selagi peranti dimatikan. Lazimnya ia menyimpan bukan cap unix, melainkan medan takwim secara berasingan, dan lebar medan tahunnya adalah miliknya sendiri, sehingga pada papan lama perbualan tentang 2038 kerap bermula dengan soalan: sampai tahun mana cip itu sendiri mengira.
Protokol NTP membawa jam mesin kepada masa bersama dengan kejituan beberapa milisaat, dan ia jugalah yang memperingatkan sisipan dengan bendera khas sehari lebih awal. Hadnya sendiri pun ada, dan had itu tiba lebih awal: kiraan berjalan sejak 1900 dalam tiga puluh dua bit tak bertanda dan akan melimpah pada Februari 2036.
Ke dalam log, cap ditulis sama ada dengan nombor atau dengan rentetan menurut piawai, dan yang kedua lebih baik tepat kerana satu sebab: pada rentetan yang sama panjangnya, tertib abjad bertepatan dengan tertib masa, sehingga catatan tersusun tanpa perlu menghuraikan tarikh. Justeru kerana itulah format ini tersebar jauh di luar teknik pengiraan.
Kesiapsiagaan sesuatu peranti bagi 2038 hanya dapat diuji dengan satu cara — mencepatkan jamnya melepasi sempadan malang itu dan melihat apa yang berlaku kepada log, kepada sijil dan kepada pengiraan selang. Dengan cara itu telah pun ditemui kegagalan dalam pengebilan, dalam sistem kawalan masuk dan dalam tempoh sah kunci, tempat tarikh masa depan dibentuk dengan penambahan dan melimpah jauh sebelum sempadan itu sendiri.
05 · Aturan penulisan
Dari kasar ke halus, dan sentiasa dengan sisihan
Piawai menuntut tertib medan yang menurun, empat angka bagi tahun, sempang sebagai pemisah tarikh, dan huruf T di hadapan waktu; sisihan jam ditunjukkan sama ada dengan huruf Z bagi meridian sifar, atau sebagai campur-tolak jam dan minit. Cap unix ditulis dengan integer tanpa pemisah ribuan, dan gandaannya mesti sentiasa dinyatakan, kerana pendarab seribu memisahkan saat daripada milisaat, sedangkan daripada saiz nombornya kedua-duanya mudah dikelirukan.
Penulisan pertama dibaca berlainan di negara yang berlainan dan kerana itu tidak boleh diterima dalam pertukaran data. Yang kedua menggugurkan pemisah dan sisihan sekali gus, sehingga detik masa itu kekal tidak tentu sehari ke setiap arah. Yang ketiga kehilangan sifar di hadapan, lalu rentetan berhenti tersusun mengikut abjad — walhal format ini dihargai justeru kerana sifat itu. Yang keempat menyamakan kiraan unix dengan skala atom, sedangkan antara keduanya terbentang dua puluh tujuh saat sisipan yang bertimbun.
06 · Satuan tetangga
Di sebelahnya berdiri semua kiraan yang dibina menurut asas yang sama, cuma dari permulaan yang lain: masa NTP sejak 1900, hari Julian sejak tengah hari tahun 4713 sebelum tarikh kita, skala sistem satelit sejak Januari 1980. Kesemuanya hanya berbeza pada epok dan unit, kerana itu ditukar dengan menolak satu pemalar.
saat bertanda
hadnya sudah jatuh pada 2036
saat lompat dikira dengan jujur
Di antara helaian-helaian Simetrium di sebelahnya terdapat hari Julian, tempat pemalar penukaran itu diambil, skala UTC, TAI dan UT1, yang menjelaskan saat lompat yang hilang, sekon sebagai unit kiraan, dan bit, yang lebarnya itulah menetapkan had.
07 · Bagian sejarah
Epok yang dipilih kerana kekurangan bit
Dalam panduan Unix yang pertama, masa dikira dalam satu per enam puluh saat sejak awal 1971, dan dalam tiga puluh dua bit kiraan sedemikian hanya memuat dua tahun lebih. Ia habis begitu cepat sehingga epok terpaksa digeser pada setiap terbitan sistem, lalu pecahan saat ditinggalkan demi saat bulat.
Dengan beralih kepada saat bulat, para pembangun memperoleh simpanan seratus tiga puluh enam tahun dan dapat memilih permulaannya kerana selesa, bukan kerana terpaksa. Yang diambil ialah 1 Januari 1970 — tarikh bulat terdekat pada masa lalu, yang catatan mesin pun tidak sampai ke sana — dan sejak itu tidak pernah sekali pun diubah, walaupun sistemnya sendiri lebih sekali ditulis semula dari asas.
Pertubuhan Piawaian Antarabangsa menyatukan format kebangsaan yang saling menyimpang menjadi satu dan meletakkan peraturan yang sederhana sebagai asasnya: medan berjalan dari kasar ke halus, semuanya dengan sifar di hadapan. Kesan sampingannya ternyata lebih penting daripada niat asalnya — rentetan sedemikian tersusun seperti nombor, lalu format itu tersebar ke nama fail, ke log dan ke protokol pertukaran.
Sistem meja dan sistem pelayan sudah lama beralih kepada enam puluh empat bit, dan di sana sempadannya telah ditolak melepasi setiap kaki langit yang munasabah. Bahayanya tinggal di tempat lain: dalam perisian tegar alat yang berusia dua puluh tahun, dalam format fail yang medannya diisytiharkan empat bait, dan dalam pengiraan tempoh masa depan, yang sudah melimpah hari ini juga sebaik lima belas tahun ditambahkan pada tarikh sekarang.
Kiraan yang, bertentangan dengan namanya, tidak mengira saat
Takrif masa Unix kedengaran seperti kiraan saat, namun tuntutan 86 400 saat genap sehari menjadikannya sesuatu yang lain: sebuah fungsi linear bagi penulisan UTC, bukan ukuran masa yang telah berlalu. Setiap kali perkhidmatan putaran Bumi mengumumkan sisipan, kiraan itu wajib mengulang satu nilai yang sama dua kali atau melompat ke belakang, dan daripada beza dua cap justeru saat itulah yang hilang. Dalam setengah abad kehilangan sebegitu telah bertimbun dua puluh tujuh kali, kerana itu bagi tugas yang menuntut tempoh yang sebenar diambil skala atom, bukan yang ini.
Sifat khas yang kedua sama sekali tidak terletak pada takrif, melainkan pada cara penyimpanan, dan itulah yang menjadikannya satu-satunya had dalam katalog kita yang ditetapkan bukan oleh alam mahupun persetujuan, melainkan oleh lebar sebuah perkataan mesin. Hari Julian tidak pernah berakhir, kerana ia sebuah nombor; masa Unix berakhir pada 19 Januari 2038, kerana ia sebuah medan empat bait. Beza antara sesuatu kuantiti dengan perwakilannya lazimnya kurang menyibukkan ahli metrologi, sedangkan di sini justeru itulah yang menentukan segalanya.
Katalog · satuan ukuran
Satu lembar untuk tiap besaran
Tujuh unit asas SI, dua puluh dua unit terbitan bernama sendiri, dan kuantiti di luar sistem yang tanpanya teknik mahupun kalendar tidak akan berjalan.