Pemrogram kesalahpahaman tentang waktu Unix

Saya minta maaf kepada Patrick Mackenzie .

Kemarin Danny bertanya tentang fakta-fakta aneh tentang waktu Unix, dan saya ingat bahwa kadang-kadang itu berfungsi sepenuhnya secara tidak sengaja.

Tiga fakta ini tampaknya 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, maka waktu Unix akan berubah tepat satu detik.
  3. Waktu unix tidak pernah bergerak mundur.

Semua ini tidak benar.

Tapi itu tidak cukup hanya dengan mengatakan "Semua ini tidak benar" tanpa menjelaskan alasannya . Lihat di bawah untuk penjelasan. Tetapi jika Anda ingin berpikir sendiri, jangan gulir jamnya!


Jam meja tahun 1770-an. Disusun oleh John Leroux. Dari koleksi Wellcome . Diterbitkan di bawah CC BY

Ketiga fallacy memiliki satu alasan: lompatan detik . Jika Anda tidak terbiasa dengan detik ekstra, berikut ini adalah referensi cepat:

Waktu UTC ditentukan oleh dua faktor:

  • Waktu Atom Internasional : Rata-rata pembacaan ratusan jam atom di seluruh dunia. Kita dapat mengukur sedetik dengan sifat elektromagnetik atom, dan ini adalah pengukuran waktu paling akurat yang diketahui oleh sains.
  • Waktu universal , berdasarkan rotasi Bumi di sekitar porosnya sendiri. Satu putaran penuh - satu hari.

Masalahnya adalah bahwa kedua angka ini tidak selalu bersamaan. Rotasi Bumi tidak konsisten - secara bertahap melambat, sehingga hari di Waktu Universal semakin lama. Di sisi lain, jam atom sangat akurat dan konstan selama jutaan tahun.

Ketika dua kali gagal sinkronisasi, yang kedua ditambahkan atau dihapus di UTC untuk mengembalikan sinkronisasi. Sejak 1972, layanan IERS (yang menjalankan kasus ini) telah menambahkan 27 detik tambahan. Hasilnya adalah 27 hari UTC berlangsung 86.401 detik. Secara teoritis, penampilan sehari yang berlangsung 86 399 detik (minus satu) adalah mungkin. Kedua opsi ini bertentangan dengan asumsi mendasar tentang waktu Unix.

Waktu Unix mengasumsikan bahwa setiap hari berlangsung tepat 86.400 detik (60 ร— 60 ร— 24 = 86.400), tanpa detik tambahan. Jika lompatan seperti itu terjadi, maka waktu Unix melompat setelah satu detik, atau dengan menghitung dua detik dalam satu. Pada 2019, hilang 27 detik kabisat.

Jadi kesalahan kita harus ditambah sebagai 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 jika tambahan detik belum dihapus .

    Sejauh ini, dalam praktiknya, detik tidak pernah dihapus (dan perlambatan rotasi bumi berarti bahwa ini tidak mungkin), tetapi jika itu pernah terjadi, itu berarti hari UTC satu detik lebih pendek. 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 diperpendek tidak akan sesuai dengan waktu UTC. Begini tampilannya dalam interval seperempat detik:



    Jika Anda mulai pada 23: 59: 58: 00 UTC dan menunggu satu detik, waktu Unix akan maju dua detik UTC, dan cap waktu Unix 101 tidak akan diberikan kepada siapa pun.
  • Waktu unix tidak akan pernah bisa kembali sampai satu detik tambahan ditambahkan .

    Ini sudah terjadi 27 kali dalam praktek. Di penghujung hari, UTC menambahkan tambahan 23:59:60. Hari Unix memiliki jumlah detik yang sama, sehingga tidak dapat menambahkan detik tambahan - sebagai gantinya, Anda harus mengulangi cap waktu Unix untuk detik terakhir. Begini tampilannya dalam interval seperempat detik:



    Jika Anda mulai dari 23: 59: 60.50 dan menunggu setengah detik, waktu Unix kembali selama setengah detik, dan cap waktu Unix 101 sesuai dengan dua detik UTC.

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

Waktu adalah hal yang sangat aneh.

Source: https://habr.com/ru/post/id452584/


All Articles