Приношу извинения Патрику МакКензи.

Вчера Дэнни поинтересовался любопытными фактами о Unix-времени, а я вспомнил, что иногда оно работает совершенно неинтуитивно.

Вот эти три факта кажутся в высшей степени разумными и логичными, не так ли?

  1. Время Unix — это количество секунд с 1 января 1970 года 00:00:00 UTC.
  2. Если подождать ровно одну секунду, то время Unix изменится ровно на одну секунду.
  3. Время Unix никогда не двигается назад.

Всё это неправда.

Но недостаточно просто заявить «Всё это неправда», не объяснив, почему. Объяснения см. ниже. Но если хотите сами подумать, не прокручивайте изображение часов!


Настольные часы 1770-х годов. Собрано Джоном Леру. Из коллекции Wellcome. Опубликовано под лицензией CC BY

У всех трёх заблуждений одна причина: високосные секунды. Если вы не знакомы с дополнительными секундами, вот краткая справка:

Время UTC определяется двумя факторами:

  • Международное атомное время: усреднённые показания сотен атомных часов по всему миру. Мы можем измерить секунду по электромагнитным свойствам атома, и это самое точное измерение времени, известное науке.
  • Всемирное время, основанное на вращении Земли вокруг собственной оси. Один полный оборот — одни сутки.

Проблема в том, что эти два числа не всегда совпадают. Вращение Земли не является последовательным — оно постепенно замедляется, поэтому сутки во Всемирном времени становятся длиннее. С другой стороны, атомные часы дьявольски точны и постоянны в течение миллионов лет.

Когда два времени выпадают из синхрона, в UTC добавляется или удаляется секунда, чтобы вернуть синхронизацию. С 1972 года служба IERS (которая управляет этим делом) добавила 27 дополнительных секунд. В результате получилось 27 суток UTC продолжительностью в 86 401 секунду. Теоретически возможно появление суток продолжительностью 86 399 секунд (минус одна). Оба варианта противоречат фундаментальному предположению о Unix-времени.

Время Unix предполагает, что каждый день длится ровно 86 400 секунд (60 ? 60 ? 24 = 86 400), без всяких дополнительных секунд. Если происходит такой скачок, то время Unix либо перепрыгивает через секунду, либо отсчитывая две секунды за одну. По состоянию на 2019 год в нём отсутствует 27 високосных секунд.

Так что наши заблуждения нужно дополнить следующим образом:

  • Время Unix — это количество секунд с 1 января 1970 00:00:00 UTC минус високосные секунды.
  • Если подождать ровно одну секунду, время Unix изменится ровно на одну секунду, если не была удалена дополнительная секунда.

    До сих пор на практике секунды никогда не удалялись (и замедление вращения Земли означает, что это маловероятно), но если бы это когда-либо произошло, это означало бы, что день UTC стал на одну секунду короче. В этом случае последняя секунда UTC (23:59:59) отбрасывается.

    В каждых сутках Unix одинаковое количество секунд, поэтому последняя Unix-секунда укороченного дня не будет соответствовать никакому времени UTC. Вот как это выглядит, в интервалах по четверти секунды:



    Если стартовать в 23:59:58:00 UTC и подождать одну секунду, время Unix продвинется на две секунды UTC, а метка времени Unix 101 никому не назначается.
  • Время Unix никогда не может вернуться назад, пока не добавлена дополнительная секунда.

    Это уже 27 раз произошло на практике. По окончании суток UTC добавляют дополнительную секунду 23:59:60. В сутках Unix одинаковое количество секунд, поэтому он не может добавить дополнительную секунду — вместо этого приходится повторять метки времени Unix для последней секунды. Вот как это выглядит, в интервалах по четверти секунды:



    Если стартовать в 23:59:60.50 и подождать полсекунды, время Unix возвращается на полсекунды, а метка времени Unix 101 соответствует двум секундам UTC.

Вероятно, это не единственные странности времени Unix — только то, что я вчера вспомнил.

Время — очень странная штука.

Комментарии (125)


  1. TheGodfather
    20.05.2019 10:08
    +1

    Сразу вспомнил «Заблуждения программистов относительно времени» — habr.com/ru/post/146109


    1. agarus
      20.05.2019 22:19

      Еще есть видео на близкую тему:

      Time & Timezones - Computerphile


  1. onix74
    20.05.2019 10:11
    +4

    Время — очень странная штука.

    — Время — это лишь субъективное восприятие реальности. Ведь часы, по сути, измеряют сами себя. Показания часов можно объективно сравнивать только с другими часами…
    — Молодой человек, я вам ещё раз повторяю: «Водку после 22:00 мы не продаём!».

    PS. Навеяло… :-)


    1. Koyanisqatsi
      20.05.2019 10:14
      -1

      Почему это субъективное?


      1. onix74
        20.05.2019 10:15

        Ну не нужно всё так буквально воспринимать. Это всего лишь анекдот.


      1. ibKpoxa
        20.05.2019 18:11
        +2

        Ну если сравнить полчаса на раскаленной сковородке и полчаса с красивой девушкой… то да, время это нечто субъективное.


        1. AllexIn
          21.05.2019 08:13

          Время очень объективно. А вот ощущение времени…


      1. didkovskyi
        20.05.2019 18:58

        В природе есть только последовательность событий, время и течение времени придумали люди.


        1. AllexIn
          21.05.2019 08:14

          «В природе есть только атомы, а вот расстояние и скорость придумали люди.»
          Нет, люди не придумали. Люди выбрали способ измерения.


          1. didkovskyi
            21.05.2019 16:01

            И как же можно померять время объективно?


            1. AllexIn
              21.05.2019 16:49

              Любым процессом период которого близок к константному.
              Скажите что это не абсолютно объективно? Так мы и расстояние абсолютно объективно измерить не способны.


              1. didkovskyi
                21.05.2019 19:55
                -1

                Опять же на основании чего-то вам нужно определить «константность» роцесса. В сухом остатке вы можете сравнивать только один процесс с другим. И если в системе есть только два процесса, которые вы можете сопоставлять, то в случае сбоя, как вы определите какой именно процесс дал сбой?


                1. AllexIn
                  21.05.2019 19:57

                  Ровно такой же вопрос про изменение расстояния можно задать.
                  Будете?


                  1. didkovskyi
                    21.05.2019 20:00

                    Это не ответ на вопрос. Минусовать можно сколько угодно :)


                    1. AllexIn
                      21.05.2019 20:02

                      Ответ на вопрос на два сообщения выше от этого.
                      Если вы считаете, что расстояния тоже «выдуманы» — обсуждать нечего. Если с расстоянием всё ок, то жду от вас описания разницы между расстоянием и временем с точки зрения подсчета.


                      1. didkovskyi
                        21.05.2019 20:07
                        -1

                        Я вас спросил конкретно про время. Говорим мы о времени. Я задал четкий простой вопрос. Вы по какой-то причине ответить не можете и уводите тему в сторону.


                        1. AllexIn
                          21.05.2019 20:12

                          Как померить время объективно?
                          Ровно также как расстояние. Я ответил на четыре сообщения выше от этого.
                          Вас ответ не устраивает? Чем?


                          1. mkovalevskyi
                            23.05.2019 21:08

                            Оффициальное определение секунды:

                            Представляет собой интервал времени, равный 9 192 631 770 периодам излучения, соответствующего переходу между двумя сверхтонкими уровнями основного состояния атома цезия-133, находящегося в покое при 0 К.


                            Насколько я помню, достичь 0к, на данный момент немного проблематично (да, можно экстраполировать итд). Так что время — достаточно такая себе величина ;)

                            Другой вопрос, что эталонное определение метра, на данный момент, таки тоже зависит от времени. Так что уровень субьективности \ обьективности у них достаточно одинаков.


                            1. AllexIn
                              23.05.2019 21:29

                              Об этом и речь. Время ничем особо не отличается от любой другой характеристики мира, которую мы пытаемся как-то измерять.


    1. didkovskyi
      20.05.2019 18:55

      «Человек с земли»?


  1. Zalechi
    20.05.2019 10:30

    Есть атомное время, есть вращение земли.
    Одного не могу понять, зачем корректировать время суток, обманывая самих себя в первую очередь?
    Этот же вопрос касается високосного года.
    Мы подстраиваем календари и течение времени вместо точной синхронизации с процессами из природы/космоса…


    1. trolley813
      20.05.2019 10:42

      Вероятно, это не единственные странности времени Unix — только то, что я вчера вспомнил.

      Это скорее не странности времени Unix, а странности UTC. Согласен с Zalechi — корректировать время суток особого смысла нет, вращение земли изменяется слишком медленно. Даже если каждый год (не) добавлять по секунде (а необходимость в этом возникает далеко не каждый год — кто знает, а вдруг придется и убрать лишнюю секунду), то через 300 лет (по астрономическим меркам совсем мало, а по "человеческим" (и компьютерным) — совсем нет) время отклонится от "истинного" всего на 5 минут. Подавляющее большинство людей не заметит, что солнце стало восходить на минуту позже, чем оно восходило 60 лет назад. Ну и наконец, если накопится слишком большая разница, можно и в другой часовой пояс перейти. Но произойдет это очень и очень нескоро...


      1. Zalechi
        20.05.2019 11:05

        Больше того, не могу понять кому это выгодно — корпорациям, составителям календарей, государству? Кого мы обманываем? Есть астрономический год, который по идее со временем так же замедляется, то есть увеличивается. Есть галактический год, но мы им не пользуемся в наших айфонах, поэтому оставим в покое. Но вот привычные нам календари, зачем их вертеть? Я понимаю вопрос генной инженерии, когда мы внедряемся в геном с целью исцеления серьезных патологий(забудем про этичность на минутку). Я понимаю, что в прежние времена не быо тех достижений что мы имеем сейчас и было удобней, скажем, считать зарплаты или ещё там какой учёт вести, подстраивая календари и время суток. Но сейчас то чего? Просто объясните толковые люди в этой области?


        1. u_235
          20.05.2019 11:23

          Когда последний раз календарь изменился?


          1. Zalechi
            20.05.2019 11:55

            Високосный год — об этом изменение календаря. И вот к чему оно? Дышать от него легче, денег в зарплату прибавляют или всё-таки сон короче становится?


            1. u_235
              20.05.2019 12:07

              Вообще-то високосный год появился задолго до атомных часов, компьютеров и ИТ. И, как и дополнительные секунды, появился он с одной целью — что бы время как можно точнее соответствовало астрономическому.


              1. Zalechi
                20.05.2019 12:16

                Вы не поняли. Я о том, что земля вращается вокруг солнца, и не бывает такого, что раз в четыре года она делает это на сутки дольше.

                Понимайте, люди зациклились на круглых часах с оборотом в 360 градусов, и пока не желеают отпускать календарное время в свободное плавание. Вот им нужно зачем-то(тут как раз я и задаюсь вопросом — зачем?) впихивать суточные и годовые ритмы в это круглое табло поделённое на 24 часа и сколько там дней…
                Видать так проще, всем…


                1. nckma
                  20.05.2019 13:13

                  Но ведь тогда, если раз в 4 года не добавлять один день в феврале, то через сотни лет январь уже будет приходиться на теплую осеннюю погоду. Оно вам надо такое?


                  1. nerudo
                    20.05.2019 14:35

                    Ах как хочется немножко тепла в январе :)


                  1. worldmind
                    20.05.2019 14:46

                    Да у некоторых отщепенцев это уже так и ничего, выживают.


                1. mkovalevskyi
                  20.05.2019 16:23

                  Вы это банкам расскажите, особенно связанным с торгами на бирже, что «плюс минус день — то такое в пределах вечности» ))
                  Там счет на миллисекунды идет, и им ооочень интересно знать который же на данный момент час, с точностью до вышеозначенных миллисекунд.


                  1. Tarakanator
                    21.05.2019 10:45

                    Биржам вообще пофиг на астрономический день.


                  1. semen-pro
                    21.05.2019 18:17

                    Секунду прибавляют (отнимают) уже после закрытия торгов на бирже


                1. deadNightTiger
                  20.05.2019 17:38

                  Предлагаете иметь нецелое количество дней в году? Или 6 часов в году, не присвоенных никакому календарному дню? Или приделать к Земле ракетные двигатели, чтобы год длился ровно 365 дней? :)


                  1. Zalechi
                    20.05.2019 18:43
                    -3

                    По-моему нормально и русским языком написал, Что хотелось бы, что бы год длился 365,2 дня в году, но ниже в комментариях люди напомнили, что тогда было бы трудно считать недели, выходить на работу, ставить будильник, — короче с расписаниями была бы проблема. Больше вопросов не имею.

                    Неужели я не нормально оформил вопрос?


                    1. Carburn
                      20.05.2019 20:13
                      +1

                      Ты про 365,2 ничего не писал.


                    1. RomanPyr
                      24.05.2019 01:48

                      Есть вопрос по-интересней: зачем нужны недели?


                      1. VolCh
                        24.05.2019 06:51

                        Чтобы знать когда отдыхать :) Вроде во всех славянских языках, кроме русского, слово фонетически и этимологически близкое к русскому "неделя" обозначает русское воскресенье, день отдыха, день когда ничего не делают. В русском остался понедельник, день после недели, день после отдыха


                  1. sumanai
                    20.05.2019 21:41

                    Или приделать к Земле ракетные двигатели

                    Китайцы про это уже фильм сняли. Они что-то знают.


                1. SofaKing18
                  20.05.2019 17:51

                  Да, так действительно проще всем.

                  Если вы хотите, чтобы календарное время соответствовало астрономическому — то надо придумать удобный способ это время измерять.

                  Многие люди не могут читать время на круглых циферблатах и путают 12AM и 12PM, поэтому не стоит усложнять



              1. didkovskyi
                20.05.2019 19:06

                что бы время как можно точнее соответствовало астрономическому.


                Точнее солнечному времени. Есть еще и звездное время в котором сутки отличаются от солнечного.


            1. DoctorMoriarty
              20.05.2019 12:13

              Високосный год — об этом изменение календаря. И вот к чему оно?

              Рекомендую к прочтению:
              ru.wikipedia.org/wiki/Високосный_год


              1. Zalechi
                20.05.2019 12:23

                Очень остроумно, наверно и земля повинуясь вашим прихотям, один раз в четыре года окружает солнце медленней на сутки…


                1. Welran
                  20.05.2019 14:52
                  +6

                  Вообще то Земля, наплевав на ваши прихоти, никак не хочет проходить вокруг Солнца за целое число дней (и даже за целое число дней за четыре круга). Поэтому люди решили что лучше добавлять високосный год чем радоваться теплому солнышку в январе.


                  1. Zalechi
                    20.05.2019 15:05
                    -20

                    — перестаньте переходить на личности, бо обхаркаю. Любите жонглировать, тусуйтесь в цирке, скажем. Вам это может не нравится, но мне хотелось бы без подгонок часов в сутках и дней в году существовать, но я при этом от лица небесных тел в нашей системе на Вас не харкал.


                1. FRiMN
                  20.05.2019 15:15

                  Потому, что секунда не имеет никакого отношения к взаимному перемещению Солнца и Земли. Соответственно вы не можете определить секунду через это перемещение.


                  А вообще вот вам, про сложности в расчете времени: https://ru.wikipedia.org/wiki/Всемирное_время


                  1. Zalechi
                    20.05.2019 15:35
                    -14

                    УважемЫЕ. Я вас умоляю — прежде чем писать комментарий, удостоверьтесь, что «слышали звон и поняли от куда он». Взрослые люди, а нет Вас тыкать носом надо в корень этой ветки комментариев? Полистайте наверх и напишете своё мнение, и прошу, без перехода на личности.

                    Для особо упёртых и одарённых не поленюсь линк выставить. Простит за эмоции, но Вы просто посмотрите сколько пустой и тривиальной чуши накопилось — линк habr.com/ru/post/452584/#comment_20175064


                    1. FRiMN
                      21.05.2019 10:26

                      Так к чему вы предлагаете привязать календарную секунду?
                      И на личности я не переходил, если что.
                      Вы сетовали, что люди не привязываться к природным процессам — я вам дал ссылку именно на такие форматы времени.


            1. eridium
              20.05.2019 17:37

              А ведь при этом раз в какое-то количество лет нужно будет проводить сдвиг.
              Там посадку c/х культур к концу столетия уже нужно пересчитывать (25 дней разницы как-никак). Все научные расчеты проводить с дельтой времени… Нет, так жить тоже можно. Просто нужен новый математический аппарат для подчета без високосных.


        1. Alexandr0202
          20.05.2019 11:27

          Предположу, что знание точного времени может иметь большое значение в астрономии. И знание нюансов расчета времени Unix там пригодятся.


        1. APXEOLOG
          20.05.2019 11:43
          +2

          Зачем в США используют имперскую систему измерения с нелогичными соотношениями, тогда как почти весь мир использует куда более логичную метрическую?


          1. vlivyur
            20.05.2019 14:16

            Не весь ещё. Но их родитель — Британия, уже почти перешла к метрической.


        1. mehos
          20.05.2019 17:04

          В эпоху Youtube странно вслух задаваться таким вопростом, если вы старше 8 лет.
          Потому что в сутках 24,0000006 часа, а в году — 365,2421891 дня, вот почему.
          Чем сто раз говорить, лучше один раз увидеть;)


          1. Zalechi
            20.05.2019 17:07
            -12

            Вы издевайтесь? Ответы я получил ниже, а все что выше это мусор, как и Ваша ссылка.ъ


    1. Soffort
      20.05.2019 13:13

      >зачем корректировать время суток, обманывая самих себя в первую очередь?
      Чтобы рабочий день продолжал начинаться ровно в девять, а читая книгу пятисотлетней давности ты понимал, что «в 13:00» это примерно полдень, а не вечер и не утро. Условно, конечно. но суть такова.


      1. trolley813
        20.05.2019 13:21
        -1

        Да вот я выше уже писал — не изменится оно на столько за 500 лет. За 5000 — может быть, и то не факт. Да и часто ли мы даже сейчас читаем 500-летние книги (особенно с описанием точного времени в них)? Кроме того, и рабочий день 500 лет назад далеко не в 9 начинался.


        1. grondek
          20.05.2019 13:45

          Високосный год — раз в 4 года. За столетие календарь сместится почти на месяц.

          Происходит это потому что периоды обращения Земли вокруг Солнца и вокруг своей оси не кратны друг другу. Поэтому приходится раз в 4 года компенсировать 1 день. А раз в 100 лет, если правильно помню, год который должен был быть високосным — будет обычным. Потому что прибавка 1 дня каждые 4 года это чуточку многовато и надо компенсировать обратно.


          1. ainoneko
            20.05.2019 15:30
            +1

            А раз в 100 лет, если правильно помню, год который должен был быть високосным — будет обычным. Потому что прибавка 1 дня каждые 4 года это чуточку многовато и надо компенсировать обратно.
            Но это ещё не всё: раз в 400 лет снова прибавляем день, потому что предыдущая коррекция на ещё меньшую чуточку не совсем точна. ?\_(?)_/? (Ещё дальше пока не пошли, но проекты были.)


        1. Dim0v
          20.05.2019 14:05

          не изменится оно на столько за 500 лет

          Если отменить високосный год, то всего за 120 лет все времена года съедут на целый месяц. А через 500 лет новый год станут отмечать с шашлыками на природе, отмахиваясь от комаров.


          1. Zalechi
            20.05.2019 15:43
            -7

            А в чем проблема? Больше того, я бы хотел день своего рождения справлять ровно через год, а не — как оно там получается… со всеми этими искажениями.


            1. geher
              20.05.2019 15:52
              +1

              Так через год — это не через определенное фиксированное время, а в тот же день в том же месяце по используемому календарю.
              Конечно, в связи с наличием високосных лет могут возникать накладки (день рождения 29 февраля, например), но родившихся в "неправильные" дни намного меньше, чем остальных, а остальным пофиг.


              Могу предложить решение. Создайте свой календарь или найдите древний без вставок (кстати, у Майя с их аж тремя разными продолжительностями годов, используемых одновременно, дни вставлялись?) и празднуйте день рождения по нему. Будет необычно и креативненько.


            1. grondek
              20.05.2019 15:54

              За счет коррекций и получается справлять день рождения ровно через год с точность до суток.

              Если бы коррекций не было, то день рождения справлялся бы через 365 дней, что примерно на четверть суток меньше времени оборота Земли вокруг Солнца.


            1. Dim0v
              20.05.2019 15:56
              +2

              я бы хотел день своего рождения справлять ровно через год,

              У вас 29 февраля день рождения? Если нет, то не понимаю, как у вас может получаться справлять день рождения не ровно через год. И главное — зачем.


              А в чем проблема?

              В том, что это дико неудобно. Например, придется постоянно корректировать графики огромной кучи различных сезонных мероприятий. Это и даты запуска/отключения централизованного отопления. И графики проведения ремонтных/профилактических работ в системах водоснабжения. Графики ремонта дорог. Графики проведения абсолютно всех аграрных работ. И еще куча всего. Что заденет всех людей без исключения, а не только 0,07% тех, кто родился 29 февраля и других бедолаг, которые хотели бы что-то справлять ровно, а не криво.


              1. geher
                20.05.2019 16:02

                Это и даты запуска/отключения централизованного отопления.

                По крайней мере в некоторых населенных пунктах нет фиксированного графика этих мероприятий, а все завязывается на среднюю температуру.
                Что-то вроде такого: в течение десяти дней подряд среднедневная температура превышает 10 градусов — выключаем, ниже 8 градусов — включаем.
                Остальное да, критично по сезонам и не должно существенно (больше нескольких дней) меняться по крайней мере за столетие.


                1. Iwanowsky
                  20.05.2019 22:14

                  В постановлении Правительства РФ от 2011г. описаны нормы включения/отключения центрального отопления: среднесуточная температура ниже 8 градусов в течение 5 дней, а также по постановлению органов местного самоуправления; и то же самое — по отключению его весной.


              1. Zalechi
                20.05.2019 16:04
                -3

                Да согласен, тоже пару минут назад пришёл к такому выводу, что тем причинам, что Вы описали…


            1. bay73
              20.05.2019 16:05
              +1

              Проблема в том, что большинство явлений природы привязаны к земным сезонам. Картошку сажают в мае, а азиатские муссоны зимой дуют. Ежегодно переписывать все сельскохозяйственные календари выходит намного накладне, чем добавлять один день раз в четыре года.


            1. chirkin
              20.05.2019 17:50

              А в чём проблема? Если хотите ровно — празднуйте себе миллионы секунд со дня рождения, а не года :)


              1. Tarakanator
                21.05.2019 10:48

                Если хотите ровно, то празднуйте себе 10^n секунд со для рождения.
                Не забудьте выбрать систему счисления.


            1. VolCh
              20.05.2019 21:45

              Через год — это через через оборот Земли вокруг Солнца? Так вы будете встречать утро, день, вечер и ночь рождения по очереди.


          1. hunroll
            20.05.2019 15:50

            Южному полушарию, вроде бы, это ни капельки не мешает…
            Кому это всё принесёт неудобства — Школьники (потому что «летние» каникулы будут динамические, с 15го декабря до 18 марта, например) и Агро-сектор, потому что будет сложнее понять, когда что сеять.
            Но с другой стороны, есть же расписание рассветов и закатов на много лет вперёд. Вот так же будет расписание начала весны, осени и тд.
            Всем понятно что в ближайшее время никто ничего менять не будет и мы никогда не узнаем, как это будет, но было бы интересно хотя бы посмотреть про это всё фильм)))

            А вообще у нас глобальное потепление, все дела, через 100-150 лет будет вечное лето (или зима, как пойдёт), мб и календарь подправят)


            1. Zalechi
              20.05.2019 15:59

              Вот я тоже покурил, покумекал, и пришёл к выводу, что не меняют Календарь из-за удобства регламентирования например рабочих недель. То есть, что бы избежать кошмара работодателя. Пожалуй эта главная зависимость в современном мире от корректируемого календаря и времени суток


              1. u_235
                20.05.2019 16:12

                1. Zalechi
                  20.05.2019 16:31
                  -3

                  Да спасибо, до меня уже дошло. И кстати вот два коммента где люди нормально ответили по субъекту моего вопроса:
                  habr.com/ru/post/452584/#comment_20176648
                  habr.com/ru/post/452584/#comment_20176072

                  А большинство комментов, что выше — ну Вы меня простите, но детский сад. И карму загадили, и будут утверждать, что так и должно быть. Да плевал я на них. А вот эти два коммента, как раз то, что я искал


            1. Dim0v
              20.05.2019 16:10
              +2

              Южному полушарию, вроде бы, это ни капельки не мешает…

              Да. Потому что мешает не тот факт, что новый год летом, а тот факт, что он будет постепенно "плыть" от зимы к лету.


              Но с другой стороны, есть же расписание рассветов и закатов на много лет вперёд. Вот так же будет расписание начала весны, осени и тд.

              С этим есть одно большое различие и 2 проблемы.
              Различие (которое является причиной первой проблемы). Время рассвета и заката меняется по синусоиде. Оно остается в неких рамках. А с отменой високосных годов — времена года будут постоянно ползти в одну сторону. Никаких рамок не будет.


              И проблемы:
              1) Кто пользуется расписанием закатов и рассветов? Какому проценту населения вообще интересна информация о точном времени рассвета или заката? Единицам. Остальным более чем достаточно общих рамок, о которых я писал выше. А вот постоянная смена графика времен года в той или иной мере заденет всех людей без исключения.


              2) Насколько удобно лично вам было бы каждый вечер сверяться с расписанием рассветов прежде, чем завести будильник на утро? Зачем делать так же неудобно и с временами года?


              1. hunroll
                20.05.2019 16:23

                Кому сейчас нужен календарь рассветов — Людям, которые хотят встать с рассветом:) мб у них какое-то хозяйство или ещё что-то, что подвязано на этот природный процесс.
                Кому нужен будет «календарь весны» — Людям, которые занимаются сельским хозяйством, чтобы знать, когда что высаживать. И то, я не уверен что они подвязаны сейчас на обычный календарь, ведь бывает что в апреле снег и так далее…
                Почему он не нужен будет мне (ну и кому-то ещё):
                1. Мне всё равно, какая будет погода на новый год. Если я смогу на Новый Год закусывать шампанское свежим шашлычком — даже рад буду)
                2. На море я езжу не в сезон, и не езжу, а летаю, потому что слишком бедный чтобы ездить на локальное море в сезон)
                3. Каникулы. Школьникам, я думаю, всё равно, какая дата будет на календаре, когда начнутся каникулы. Скажут им что они с 9го марта — ну ок.
                4. День рождения — я был бы рад встретить хоть раз с температурой на улице меньше +40…

                Я вот только недавно осознал что уже май, когда оставил машину на солнце на целый день… А до этого у меня был примерно март. Вот, наверное, в этом полезна привязка месяцев к временам года, чтоб такие потерянные как я поменьше терялись во времени)


              1. paluke
                20.05.2019 19:56

                Да. Потому что мешает не тот факт, что новый год летом, а тот факт, что он будет постепенно «плыть» от зимы к лету.
                Только потому что вы, привыкли к этому постоянству. А так это не мешает


                1. mkovalevskyi
                  20.05.2019 21:35

                  особенно растениям. фиг с ним, будем зимой сажать )


                  1. rvs2016
                    21.05.2019 11:37

                    Это просто все привыкли к тому, что растения надо сажать в определённые месяцы — но всё-равно с учётом погоды, времени суток и т.п. — во время ливня, например, картошку сажать сложно, а ночью — хоть и можно, но зачем…

                    А вот если привыкнут к другим условиям (например, сажать картошку после схода снегов и когда температура воздуха будет достаточно тёплой в течении некоторого времени), то будут условия такого типа считать вполне привычными.

                    В мусульманском календаре вон начало месяца определяется даже не по новолунию, а в день, когда после новолуния месяц на небе стал видимым! А это 1-3 дня от новолуния и засвидетельствовать это должны 2 сильно авторитетных мусульманина!


          1. Tarakanator
            20.05.2019 16:22

            Нет уже были високосные года и часовые пояса.
            Зачем добавлять ещё секунды? Можно подождите, пока время не уйдёт на час и смените часовой пояс. И от 29 февраля никто не предлагал отказываться.


            1. Dim0v
              20.05.2019 16:29

              Зачем добавлять ещё секунды?

              Они тоже "уже были". Их никто не предлагает добавлять снова. Они уже добавлены.


              И от 29 февраля никто не предлагал отказываться.

              В начале ветки речь шла в том числе и об этом:
              https://habr.com/ru/post/452584/#comment_20174850


              Одного не могу понять, зачем корректировать время суток, обманывая самих себя в первую очередь?
              Этот же вопрос касается високосного года.


    1. geher
      20.05.2019 14:21

      Одного не могу понять, зачем корректировать время суток, обманывая самих себя в первую очередь?

      Традиция, однако.
      Человеку хочется, чтобы весеннее равноденствие наступало в конце марта, чтобы полдень был всегда примерно в одно время суток, чтобы в январе всегда была зима (или лето, если в южном полушарии), чтобы пасха наступала примерно в одном сезоне и не убежала на лето и т.п.
      Туда же семидневная неделя, из-за которой год не содержит целого числа недель, пляшущие длины месяцев, из-за которых первое полугодие короче второго, праздники, неравномерно распределенные по году, и прочие "радости" планирования и отчетности.


      Кое-кто, кстати, дни к году раз в четыре года (на самом деле не каждые четыре года, но это уже тонкости и не у всех), кстати, не прибавляет, и год с вращением Земли вокруг Солнца не синхронизирует. Но им все равно приходится добавлять к году дни для синхронизации с Луной. А другие не мелочатся, и добавляют к году для синхронизации не дни, а целые месяцы.


      Мы подстраиваем календари и течение времени вместо точной синхронизации с процессами из природы/космоса…

      Подстройка календарей как раз и обеспечивает их точную (насколько возможно без полной потери удобства пользования) синхронизацию "с процессами из природы/космоса": вращение Земли вокруг Солнца (год), вращение Солнца вокруг Земли (в системе отсчета, зафиксированной относительно Земли, день), вращение Луны вокруг Земли (месяц в некоторых календарях, вполне действующих кое-где на нашей планете).


  1. saipr
    20.05.2019 10:53
    -2

    1. u_235
      20.05.2019 11:13
      +1

      Не unix, а локальная ветка. Результат какой?


      1. nerudo
        20.05.2019 11:56
        +2

        Кранты Союзу. Где теперь локальную ветку развивают?


        1. u_235
          20.05.2019 12:16

          Там же, где и раньше — глубоко под землей, на ПЭВМ, собранных на серии К1590.


    1. Nova_Logic
      20.05.2019 11:50
      +1

      нет не было такого времени, хватит спамить.
      UNIX развивалась bell labs. Вот клоны развивались где угодно, но не UNIX.
      И эти байки про «развивался», тоже выглядят забавно.
      Какие UNIX-like системы появились:
      1)*BSD — FreeBSD, OpenBSD, NetBSD, частично OS X —все из них широко известны между прочим, и хотя сейчас несколько потеряли популярность, они много чего дали этому миру.
      2)Solaris
      3)AIX
      4)HP/UX
      5)QNX
      6)Linux
      Все выше описанные нашли место и в истории и в настоящем. А вот польза человечеству от «развития unix в СССР» науке не известна.


      1. pavlushk0
        20.05.2019 11:59
        -3

        По вершкам судите. Примеров не назову, но нельзя исключать что какой то код перетек в популярные юникс клоны от советских программистов.


        1. Jouretz
          20.05.2019 16:18

          Вот когда будут факты, тогда будет нельзя исключать. А пока вполне себе можно.
          С таким же успехом нельзя исключать что первые версии UNIX получены из исходных кодов автопилота протосовского корабля…


        1. wondersalmon
          20.05.2019 17:38

          Но и утверждать такое без доказательств тоже несколько странно


  1. ElegantBoomerang
    20.05.2019 11:28

    Хочется отметить, что запись повторения 00:00:00 не совсем корректна, правильнее первую назвать 23:59:60.


    1. vlivyur
      20.05.2019 14:17

      Вроде бы оно так и отображается.


    1. Serge3leo
      20.05.2019 14:29

      Так и да, по стандартам так, и по ГОСТ ИСО 8601-2001, и по МСЭ-R TF.460-6, см. так же: Википедия: Дополнительная секунда
      image


  1. valis
    20.05.2019 12:59

    Да, вроде вполне очевидные вещи, но о которых реально не задумывался (или пока не было повода задуматься)


  1. Hedgehog7
    20.05.2019 14:00

    Спасибо за интересный пост с объяснениями — не думала, что UNIXовое время настолько коварно :)


  1. geher
    20.05.2019 14:01
    +1

    Все написанное в статье не имеет прямого отношения к поведению времени UNIX.
    Более того, на изолированном компьютере это время ведет себя именно так, как написано в начале статьи, хотя с оговорками:


    Время Unix — это количество секунд с 1 января 1970 года 00:00:00 UTC (в соответствии с текущим состоянием внутренних часов компьютера, а не реальное количество секунд от реального исторического момента).
    Если подождать ровно одну секунду, то время Unix изменится ровно на одну секунду (по собственным часам компьютера, естественно, а не в соответствии с показанием эталона).
    Время Unix никогда не двигается назад (само не двигается).

    А все описанное — это про коррекцию времени. И касается оно любой коррекции времени, будь то корректировка убежавших часов в системе по протоколу NTP или перевод времени "руками" в соответствующих настройках ОС. При этом время в системе вполне может сдвинуться в любую сторону на любое значение.


    1. blind_oracle
      20.05.2019 16:10

      А все описанное — это про коррекцию времени. И касается оно любой коррекции времени, будь то корректировка убежавших часов в системе по протоколу NTP или перевод времени «руками» в соответствующих настройках ОС.
      Нет, високосная секунда не относится к коррекции времени «через NTP или руками». В Linux ее вносит ядро когда это необходимо.

      При этом время в системе вполне может сдвинуться в любую сторону на любое значение.
      А тут смотря какой источник времени используется. В современных ОС их много, в том числе есть монотонные — которые никогда не могут уйти назад. Примеры можно глянуть в петоне: docs.python.org/3/library/time.html#time-clock-id-constants


      1. geher
        20.05.2019 16:24

        Нет, високосная секунда не относится к коррекции времени «через NTP или руками». В Linux ее вносит ядро когда это необходимо

        А это как и зачем?
        Часы в компьютере, мягко говоря, не атомные, и редкая вставка високосной секунды по соображениям "изнутри" точности часам компьютера не добавит
        Кроме того, в статье написано: "С 1972 года служба IERS (которая управляет этим делом) добавила 27 дополнительных секунд", откуда следует, что решение о вставке (или удалении) секунд принимается не ядром, а организацией IERS.


        1. blind_oracle
          20.05.2019 16:38

          А это как и зачем?

          Что значит зачем? Чтобы время было синхронизировано. *NIX-системы часто работают с аптаймами в годы и многий софт очень сильно зависит от времени и его точности, разница в секунду это очень много для них.

          Кроме того, в статье написано: «С 1972 года служба IERS (которая управляет этим делом) добавила 27 дополнительных секунд», откуда следует, что решение о вставке (или удалении) секунд принимается не ядром, а организацией IERS.
          Понятное дело что ядро не по своему желанию это делает. Какой-либо внешний софт, чаще тот же NTP демон (у которого есть справочник ближайших внесений високосной секунды) использует вызов adjtimex с флагом STA_INS для информирования ядра о том что тогда-то надо бы вставить високосную секунду в системное время.


          1. geher
            20.05.2019 16:49

            Что значит зачем? Чтобы время было синхронизировано. *NIX-системы часто работают с аптаймами в годы и многий софт очень сильно зависит от времени и его точности, разница в секунду это очень много для них.

            В таких случаях обычно просто синхронизируют время с внешним источником (NTP, GPS, другой способ), т.е. проводят ту самую коррекцию.


            Понятное дело что ядро не по своему желанию это делает. Какой-либо внешний софт, чаще тот же NTP демон (у которого есть справочник ближайших внесений високосной секунды) использует вызов adjtimex с флагом STA_INS для информирования ядра о том что тогда-то надо бы вставить високосную секунду в системное время.

            Коррекция же, по данным из внешнего источника, только отложенная.


            1. blind_oracle
              20.05.2019 16:55

              В таких случаях обычно просто синхронизируют время с внешним источником (NTP, GPS, другой способ), т.е. проводят ту самую коррекцию.

              NTP в штатном режиме работы не производит коррекцию времени. Совсем. Он подстраивает частоту генератора тактов чтобы время шло с правильной скоростью. Коррекция производится обычно только один раз при старте и дальше идет только подстройка частоты.

              А вставка секунды — это интрузивная операция, причем вставляется 60 секунда которой быть не может. Причем нужно учесть все тысячи таймеров, которые крутятся в ядре чтобы они от этого не пострадали. Был баг даже пару лет назад в этой части когда какая-то бяка произошла после вставки високосной секунды.

              Поэтому это делается ядром.

              Коррекция же, по данным из внешнего источника, только отложенная.
              Это уже игра слов. С тем же успехом мы могли бы запихнуть в ядро расписание всех коррекций на тысячу лет вперед. Только проще делать это из userspace. По факту NTP просто информирует ядро что по окончанию данного UTC-дня нужно внести 60 секунду и все. Сам он ничего не корректирует.


              1. duger
                21.05.2019 06:20
                +1

                С тем же успехом мы могли бы запихнуть в ядро расписание всех коррекций на тысячу лет вперед

                Нет никакого расписания коррекций ны тысячу лет вперед. Решение принимается дважды в год по результатам астрономических наблюдений Международной Службой Вращения Земли.

                Выпаскается т.н. IERS Bulletin C (например, такой) в котором объявляется будет или не будет вставка високосной секунды в следующее возможное окно (31 июня, 31 января)


                1. blind_oracle
                  21.05.2019 10:36

                  Нет никакого расписания коррекций ны тысячу лет вперед. Решение принимается дважды в год по результатам астрономических наблюдений Международной Службой Вращения Земли.

                  Я образно говорил. К тому что нет никакой разницы откуда идет эта информация — внешнего источника или вбитого в ядро расписания.

                  И «принятие решения» это по сути фикция, замедление вращения планеты идет с постоянной скоростью — можно было вполне составить расписание и производить коррекцию на периодической основе.

                  Там скорее разные геополитические факторы учитываются еще или что-то в таком духе, лень изучать.


              1. maxxant
                21.05.2019 11:38

                > Был баг даже пару лет назад в этой части когда какая-то бяка произошла после вставки високосной секунды.

                уточню, в 12-ом году:
                bugs.mysql.com/bug.php?id=65778
                habr.com/ru/post/146863


    1. ToSHiC
      21.05.2019 00:13
      +1

      Важный момент, который вы, кажется, не уловили: unixtime — это не эквивалент UTC, а вполне себе отдельная таймзона, у которой свои свойства. Наличие високосных секунд — это свойство таймзоны UTC, которое принципиально отсутствует в unixtime. Отсюда все эти пляски с подкручиванием unixtime назад.


  1. yleo
    20.05.2019 14:49
    +1

    Странная статья, автор (наверное, всё-таки) хотел внести ясность, а получилось "как всегда" — примерно FUD.


    В актуальных Unix-ах время считается в секундах прошедших с точки отсчета "Epoch", за которую принято время 1970-01-01 00:00:00 +0000 по UTC. Это то время, с которым встречается большинство программистов — возвращаемое функцией time(). Никакие високосные секунды не должны на него действовать — ибо (в идеале) это количество "атомных" секунд прошедших с точки отчета (Epoch).


    Високосные секунды и таймзоны, связанные с ними "странности", будут иметь место когда мы захотим преобразовать "машинное" Unix-время в "человеческое" (aka broken-down time, см man localtime) в некой таймзоне. Тут всё достаточно просто и прозрачно, если разобраться (как-то пришлось). Тем не менее, важно не забывать что таймзоны не константны, а время неизбежно корректируется.


    При этом стоит отметить, что получаемое программистом Unix-время время на конкретной машине может быть очень неточным. Потом ято:


    1. Просто неверно задано (в CMOS/BIOS) и несинхронизировано (NTP), в том числе быть в процессе коррекции. Тут лучше начать с man clock_gettime.;
    2. В CMOS/BIOS таймер может идти в календарном "человеческом" формате, и при запуске ОС его невозможно однозначно оттранслировать в Unix-время из-за тонкостей в назначении високосных секунд и параметров таймзон (теоретически спецификация ACPI навела порядок).
    3. На одной машине соседствуют разные ОС и каждая из них имеет свое понимание о том, как устанавливать CMOS/BIOS время при более-менее точной синхронизации NTP. Например, без правок в реестре Windows пытает установить CMOS/BIOS время в локальной таймзоне, что вызывает массу "фифектов фикции".


    1. Serge3leo
      20.05.2019 18:48

      Как бы, с одной стороны, да, задумывали количество «TAI секунд» («атомных») прошедших с точки отчета (Epoch). Но как бы, с другой стороны, нет, т.к. сложившаяся практика поддержания баз временных зон не содержит дополнительных секунд по умолчанию, ну а NTP или иные способы задания времени, синхронизирует по текущему UTC в момент синхронизации.

      Поэтому, у большинства актуальных macOS/Linux/AIX/Solaris/BSD/… не количество атомных секунд с эпохи, а количество «UTC секунд» с эпохи (без дополнительных секунд).


      1. yleo
        20.05.2019 19:58

        https://sourceware.org/git/?p=glibc.git;a=blob;f=timezone/leapseconds;hb=HEAD


        С другой стороны, соглашусь что ради совместимости со старыми Unix-ами можно скомпилировать определение таймзон без високосных секунд. В результате, вместо "60" в секундах видеть NTP-дрейф, leap-вставку ядом (два раза "59") и т.д.


        1. Serge3leo
          20.05.2019 20:11

          Хм. Это часть «как бы да», а часть «как бы нет» можете взглянуть на своей системе.

          $ TZ=Europe/Moscow date
          $ TZ=right/Europe/Moscow date
          $ TZ=posix/Europe/Moscow date
          $ ls -l /var/db/ntpd.leap-seconds.list # или где в ней ntp_db_leapfile должен иметь место быть
          


          P.S. Только немного наоборот, для поддержки дополнительных секунд (по МСЭ/ГОСТ это основное название) можно скомпилировать зоны и таким образом. Но, насколько мне известно, по-умолчанию, почти все системы придерживаются POSIX интерпретации (вполне себе современный POSIX их не признаёт), т.е. без поддержки дополнительных секунд.



  1. tonny_bennet
    20.05.2019 17:34

    Интересные обсуждения выше про астрономическое и атомное время привели к одному умственному (а может и нет) эксперименту:
    Давайте, к примеру, уничтожим все часы и календари на планете и оставим только одни эталонные. Спрячем их. Как быстро и с какой точностью по сравнению с эталонными часами можно будет узнать «текущее время» по любым доступным астрономическим наблюдениям и экспериментам? Как вы думаете?


    1. Serge3leo
      20.05.2019 19:39
      +1

      Насколько мне известно, все современные «эталонные часы» отсчитывают время от некоторой эпохи.

      В постановке эксперимента не ясно, желаете ли Вы «спрятать», и эпоху, и часы, тогда ответ однозначный, отрицательный. Либо же, Вы желаете спрятать только часы, а эпоху оставить, тогда не ясно в какой форме Вы желаете оставить эту эпоху.

      P.S.
      Смысл эксперимента, конечно, сомнительный. К примеру, эпоха входит в кучу таблиц (полиномов) по движению Луны, планет, спутников, вращению Земли, и т.п., а так же данных по переменным звёздам, пульсарам, квазарам и т.п. Вы их тоже прячете или нет? Если нет, то ответ тоже однозначный, но положительный — очень быстро и очень точно.


    1. helgevans
      20.05.2019 21:07

      Все, что использует более точное наведение, чем «кручу на глаз», требует часы для расчетов направления. Незадача.


    1. Tarakanator
      21.05.2019 10:55

      С точность, превосходящую эталонные часы. По пульсарам. Т.к. их много, то комбинация задержек между сигналами будет уникальной на долгом протяжении времени.
      Если и будет повторятся, то примерное время можно будет посмотреть по взаимному расположению тел солнечной системы, а точное опять-же по пульсарам.


  1. Carburn
    20.05.2019 20:19

    Если стартовать в 23:59:60.50 и подождать полсекунды, время Unix возвращается на полсекунды, а метка времени Unix 101 соответствует двум секундам UTC.

    Какие еще полсекунды, если время Unix это целочисленное число?


  1. metalim
    20.05.2019 22:45

    Мы можем измерить секунду по электромагнитным свойствам атома, и это самое точное измерение времени, известное науке.

    Вроде ж пробегала статья про пульсары (ага, быстро вращающиеся нейтронные звёзды, за много световых лет от нас), точность которых превышает точность атомных часов, т.к. атомные часы могут дрейфовать в долгосроке.


    1. blind_oracle
      20.05.2019 23:20

      Пульсары на два порядка менее точны чем современные атомные часы: уход в 1/10^17 против 1/10^15 у пульсаров.


      1. Tarakanator
        21.05.2019 10:56

        Возможно, моя информация устарела, но у пульсаров точность как минимум БЫЛА выше, чем у атомных часов.


        1. blind_oracle
          21.05.2019 11:37

          Там наверное нужно учитывать на каком временном промежутке измеряется стабильность.

          Если брать популярное изложение, то вот тут пишут:

          “The accuracy and stability of terrestrial clocks have improved more than an order of magnitude, on average, in each decade over the last 60 years,” say Hartnett and Luiten. Today, the best optical lattice neutral atom clocks and trapped ion clocks have a frequency stability approaching one part in 10^17.

          By contrast, as more pulsars have been discovered, their timing stability has improved by less than an order of magnitude in the last 20 years. The best millisecond pulsars have a stability of only one part in 10^15 at best.
          (с) www.technologyreview.com/s/418326/where-is-the-best-clock-in-the-universe

          Ну и вообще по логике атомные эффекты должны быть более стабильны чем нейтронная звезда, которая теряет энергию постоянно и замедляется.


          1. Tarakanator
            21.05.2019 11:47

            Вспоминаю историю, когда из США к нам приехали астрономы со своими часами. Заселились в гостиницу, воткнули в розетку и ушли.
            Уборщица выдернула, аккумулятор разрядился, и астрономы поехали обратно за новым стандартом времени.
            Атомные эффекты может и стабильнее, а вот часы-совсем не факт на длительных промежутках времени. А скорость замедление пульсаров и прогнозировать можно.


            1. blind_oracle
              21.05.2019 14:54

              Ну, как видно «наземные» часы имеют восходящий тренд точности, а пульсары — скорее нисходящий. Вполне возможно что в будущем точностью атомных часов будет улучшена (в цитате выше приводят тренд «на 1 порядок в 10 лет»).

              Ну и использовать пульсары на практике, наверное, не очень удобно, даже если бы они были гораздо точнее.


              1. Tarakanator
                21.05.2019 15:07

                В вашей же цитате указано, что точность пульсаров тоже увеличивается. Просто медленнее.
                По поводу удобства смотря для чего. Астрономы очень радовались, когда открыли 2 пульсара в одной системе. Получается есть двое точных часов в одной системе и можно проверять ОТО.
                Пульсары удобны тем, что за обозримый период с ними ничего не случится. Не будет уборщицы, которая выдернет розетку.
                От атомных часов нужно ещё получить сигнал с постоянной задержкой(если время вам нужно не рядом с часами). С пульсарами мне кажется всё несколько проще.


  1. semen-pro
    21.05.2019 18:29

    Unix time определено в промежутке между 13 декабря 1901 года, 20:45:52 и 19 января 2038 года в 03:14:08. Это 2^31 секунд. После этого переменная переполнится и круг замкнется.


    1. sumanai
      21.05.2019 19:15

      Unix time не привязано к 32 битам, и во многих местах уже перешли на 64, которые дают диапазон больше возраста вселенной.