Kesalahpahaman Pemrogram Tentang Waktu Unix

saya minta maaf Patrick McKenzie.

Kemarin Danny Saya bertanya tentang beberapa fakta menarik tentang waktu Unix, dan saya ingat bahwa terkadang ia bekerja secara tidak intuitif.

Ketiga fakta ini nampaknya sangat masuk akal dan logis, bukan?

  1. Waktu Unix adalah jumlah detik sejak 1 Januari 1970 00:00:00 UTC.
  2. Jika Anda menunggu tepat satu detik, waktu Unix akan berubah tepat satu detik.
  3. Waktu Unix tidak pernah bergerak mundur.

Semua ini tidak benar.

Namun tidak cukup hanya mengatakan, β€œSemua ini tidak benar,” tanpa penjelasan. mengapa. Lihat di bawah untuk penjelasannya. Namun jika Anda ingin berpikir sendiri, jangan gulir melewati gambar jamnya!

Kesalahpahaman Pemrogram Tentang Waktu Unix
Jam meja dari tahun 1770-an. Disusun oleh John Leroux. Dari Koleksi selamat datang. Diterbitkan di bawah lisensi CC BY

Ketiga kesalahpahaman tersebut memiliki satu alasan: detik kabisat. Jika Anda belum familiar dengan detik kabisat, berikut referensi singkatnya:

Waktu UTC ditentukan oleh dua faktor:

  • Waktu Atom Internasional: Pembacaan rata-rata dari ratusan jam atom di seluruh dunia. Kita dapat mengukur detik berdasarkan sifat elektromagnetik sebuah atom, dan ini adalah pengukuran waktu paling tepat yang diketahui sains.
  • Waktu dunia, berdasarkan rotasi bumi pada porosnya sendiri. Satu revolusi penuh adalah satu hari.

Masalahnya kedua angka ini tidak selalu cocok. Rotasi bumi tidak konsisten - secara bertahap melambat, sehingga hari-hari dalam Waktu Universal menjadi lebih panjang. Di sisi lain, jam atom sangat akurat dan konstan selama jutaan tahun.

Ketika dua waktu tidak sinkron, satu detik ditambahkan atau dihapus dari UTC untuk mengembalikan sinkronisasi. Sejak tahun 1972 pelayanan IERS (yang menjalankan kasus ini) menambahkan 27 detik ekstra. Hasilnya adalah 27 hari UTC dengan durasi 86 detik. Secara teoritis, satu hari dengan durasi 401 detik (minus satu) adalah mungkin. Kedua opsi tersebut bertentangan dengan asumsi mendasar waktu Unix.

Waktu Unix mengasumsikan bahwa setiap hari berlangsung tepat 86 detik (400 Γ— 60 Γ— 60 = 24), tanpa tambahan detik. Jika lompatan seperti itu terjadi, maka waktu Unix akan melompat satu detik, atau menghitung dua detik dalam satu detik. Pada tahun 86, ada 400 detik kabisat yang hilang.

Jadi kesalahpahaman kita perlu dilengkapi dengan hal berikut:

  • Waktu Unix adalah jumlah detik sejak 1 Januari 1970 00:00:00 UTC dikurangi detik kabisat.
  • Jika Anda menunggu tepat satu detik, waktu Unix akan berubah tepat satu detik, kecuali detik kabisat telah dihilangkan.

    Hingga saat ini, dalam praktiknya, detik belum pernah dihilangkan (dan perlambatan rotasi bumi berarti hal ini tidak mungkin terjadi), namun jika hal ini benar-benar terjadi, hal ini berarti hari UTC akan menjadi lebih pendek satu detik. Dalam hal ini, detik terakhir UTC (23:59:59) dibuang.

    Setiap hari Unix memiliki jumlah detik yang sama, sehingga detik Unix terakhir dari hari yang dipersingkat tidak akan sesuai dengan waktu UTC mana pun. Berikut tampilannya, dalam interval seperempat detik:

    Kesalahpahaman Pemrogram Tentang Waktu Unix

    Jika Anda memulai pada 23:59:58:00 UTC dan menunggu satu detik, waktu Unix akan maju dua detik UTC dan stempel waktu Unix 101 tidak akan diberikan kepada siapa pun.

  • Waktu Unix tidak akan pernah bisa kembali, sampai detik kabisat ditambahkan.

    Ini sudah terjadi 27 kali dalam praktiknya. Di penghujung hari UTC, satu detik tambahan ditambahkan pada pukul 23:59:60. Unix memiliki jumlah detik yang sama dalam sehari, sehingga tidak dapat menambahkan satu detik tambahan - melainkan harus mengulangi cap waktu Unix untuk detik terakhir. Berikut tampilannya, dalam interval seperempat detik:

    Kesalahpahaman Pemrogram Tentang Waktu Unix

    Jika Anda memulai pada 23:59:60.50 dan menunggu setengah detik, waktu Unix datang kembali setengah detik, dan stempel waktu Unix 101 setara dengan dua detik UTC.

Ini mungkin bukan satu-satunya keanehan di masa Unix - hanya apa yang saya ingat kemarin.

Waktu - sangat hal aneh.

Sumber: www.habr.com

Tambah komentar