Заблуждения программистов о Unix-времени

Автор оригинала: Alex Chan
  • Перевод
Приношу извинения Патрику МакКензи.

Вчера Дэнни поинтересовался любопытными фактами о 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 — только то, что я вчера вспомнил.

Время — очень странная штука.
Поддержать автора
Поделиться публикацией

Комментарии 131

    +6
    Сразу вспомнил «Заблуждения программистов относительно времени» — habr.com/ru/post/146109
      0
      Еще есть видео на близкую тему:
      Time & Timezones - Computerphile

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

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

      PS. Навеяло… :-)
        –3
        Почему это субъективное?
          +3
          Ну не нужно всё так буквально воспринимать. Это всего лишь анекдот.
            +3
            Ну если сравнить полчаса на раскаленной сковородке и полчаса с красивой девушкой… то да, время это нечто субъективное.
              0
              Время очень объективно. А вот ощущение времени…
              0
              В природе есть только последовательность событий, время и течение времени придумали люди.
                +1
                «В природе есть только атомы, а вот расстояние и скорость придумали люди.»
                Нет, люди не придумали. Люди выбрали способ измерения.

                  –2
                  И как же можно померять время объективно?
                    0
                    Любым процессом период которого близок к константному.
                    Скажите что это не абсолютно объективно? Так мы и расстояние абсолютно объективно измерить не способны.
                      –1
                      Опять же на основании чего-то вам нужно определить «константность» роцесса. В сухом остатке вы можете сравнивать только один процесс с другим. И если в системе есть только два процесса, которые вы можете сопоставлять, то в случае сбоя, как вы определите какой именно процесс дал сбой?
                        0
                        Ровно такой же вопрос про изменение расстояния можно задать.
                        Будете?
                          0
                          Это не ответ на вопрос. Минусовать можно сколько угодно :)
                            0
                            Ответ на вопрос на два сообщения выше от этого.
                            Если вы считаете, что расстояния тоже «выдуманы» — обсуждать нечего. Если с расстоянием всё ок, то жду от вас описания разницы между расстоянием и временем с точки зрения подсчета.
                              –2
                              Я вас спросил конкретно про время. Говорим мы о времени. Я задал четкий простой вопрос. Вы по какой-то причине ответить не можете и уводите тему в сторону.
                                0
                                Как померить время объективно?
                                Ровно также как расстояние. Я ответил на четыре сообщения выше от этого.
                                Вас ответ не устраивает? Чем?
                                  0
                                  Оффициальное определение секунды:
                                  Представляет собой интервал времени, равный 9 192 631 770 периодам излучения, соответствующего переходу между двумя сверхтонкими уровнями основного состояния атома цезия-133, находящегося в покое при 0 К.


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

                                  Другой вопрос, что эталонное определение метра, на данный момент, таки тоже зависит от времени. Так что уровень субьективности \ обьективности у них достаточно одинаков.
                                    0
                                    Об этом и речь. Время ничем особо не отличается от любой другой характеристики мира, которую мы пытаемся как-то измерять.
              0
              «Человек с земли»?
              0
              Есть атомное время, есть вращение земли.
              Одного не могу понять, зачем корректировать время суток, обманывая самих себя в первую очередь?
              Этот же вопрос касается високосного года.
              Мы подстраиваем календари и течение времени вместо точной синхронизации с процессами из природы/космоса…
                0
                Вероятно, это не единственные странности времени Unix — только то, что я вчера вспомнил.

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

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

                          Понимайте, люди зациклились на круглых часах с оборотом в 360 градусов, и пока не желеают отпускать календарное время в свободное плавание. Вот им нужно зачем-то(тут как раз я и задаюсь вопросом — зачем?) впихивать суточные и годовые ритмы в это круглое табло поделённое на 24 часа и сколько там дней…
                          Видать так проще, всем…
                            +3
                            Но ведь тогда, если раз в 4 года не добавлять один день в феврале, то через сотни лет январь уже будет приходиться на теплую осеннюю погоду. Оно вам надо такое?
                              0
                              Ах как хочется немножко тепла в январе :)
                                0
                                Да у некоторых отщепенцев это уже так и ничего, выживают.
                                –1
                                Вы это банкам расскажите, особенно связанным с торгами на бирже, что «плюс минус день — то такое в пределах вечности» ))
                                Там счет на миллисекунды идет, и им ооочень интересно знать который же на данный момент час, с точностью до вышеозначенных миллисекунд.
                                  –1
                                  Биржам вообще пофиг на астрономический день.
                                    0
                                    Секунду прибавляют (отнимают) уже после закрытия торгов на бирже
                                    0
                                    Предлагаете иметь нецелое количество дней в году? Или 6 часов в году, не присвоенных никакому календарному дню? Или приделать к Земле ракетные двигатели, чтобы год длился ровно 365 дней? :)
                                      –2
                                      По-моему нормально и русским языком написал, Что хотелось бы, что бы год длился 365,2 дня в году, но ниже в комментариях люди напомнили, что тогда было бы трудно считать недели, выходить на работу, ставить будильник, — короче с расписаниями была бы проблема. Больше вопросов не имею.

                                      Неужели я не нормально оформил вопрос?
                                        +3
                                        Ты про 365,2 ничего не писал.
                                          0
                                          Есть вопрос по-интересней: зачем нужны недели?
                                            +1

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

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

                                          Китайцы про это уже фильм сняли. Они что-то знают.
                                          0
                                          Да, так действительно проще всем.

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

                                          Многие люди не могут читать время на круглых циферблатах и путают 12AM и 12PM, поэтому не стоит усложнять
                                            +1
                                              +1
                                              путают 12AM и 12PM
                                              Конечно путают. Было 12am прибавили час и получили 1am. Т.е. для am линейка значений имеет вид: 12, 1, 2,… 11. И 12 получается меньше 1. Бредово. Если перевести, то ещё хуже становится: 12:15am — 12 часов и 15 минут до полудня. Т.е. ещё больше 12 часов ждать до полудня. С 12:15pm почти то же самое: 12 часов и 15 минут после полудня?? да оно было 15 минут назад! Но уже с 1:15pm всё хорошо: 1 час 15 минут после полудня — согласен, так оно и было.
                                              Мне больше нравится 0am/pm.
                                                –1

                                                Так как 12 mod 12 конгруэнтно 0, то можно просто мысленно заменять 12 на 0, чтобы не путаться в порядке следования.

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


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

                                            Рекомендую к прочтению:
                                            ru.wikipedia.org/wiki/Високосный_год
                                              –6
                                              Очень остроумно, наверно и земля повинуясь вашим прихотям, один раз в четыре года окружает солнце медленней на сутки…
                                                +7
                                                Вообще то Земля, наплевав на ваши прихоти, никак не хочет проходить вокруг Солнца за целое число дней (и даже за целое число дней за четыре круга). Поэтому люди решили что лучше добавлять високосный год чем радоваться теплому солнышку в январе.
                                                  –32
                                                  — перестаньте переходить на личности, бо обхаркаю. Любите жонглировать, тусуйтесь в цирке, скажем. Вам это может не нравится, но мне хотелось бы без подгонок часов в сутках и дней в году существовать, но я при этом от лица небесных тел в нашей системе на Вас не харкал.
                                                  +1

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


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

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

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

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

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

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

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

                                                    Власти не смогли договориться с жителями и корпорациями, но процесс идёт, хоть и медленно.

                                                    –1
                                                    В эпоху Youtube странно вслух задаваться таким вопростом, если вы старше 8 лет.
                                                    Потому что в сутках 24,0000006 часа, а в году — 365,2421891 дня, вот почему.
                                                    Чем сто раз говорить, лучше один раз увидеть;)
                                                      –14
                                                      Вы издевайтесь? Ответы я получил ниже, а все что выше это мусор, как и Ваша ссылка.ъ
                                                  +2
                                                  >зачем корректировать время суток, обманывая самих себя в первую очередь?
                                                  Чтобы рабочий день продолжал начинаться ровно в девять, а читая книгу пятисотлетней давности ты понимал, что «в 13:00» это примерно полдень, а не вечер и не утро. Условно, конечно. но суть такова.
                                                    –8

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

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

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

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

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

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

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


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

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

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

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


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

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

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

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

                                                                    0
                                                                    В постановлении Правительства РФ от 2011г. описаны нормы включения/отключения центрального отопления: среднесуточная температура ниже 8 градусов в течение 5 дней, а также по постановлению органов местного самоуправления; и то же самое — по отключению его весной.
                                                                    –3
                                                                    Да согласен, тоже пару минут назад пришёл к такому выводу, что тем причинам, что Вы описали…
                                                                    +1
                                                                    Проблема в том, что большинство явлений природы привязаны к земным сезонам. Картошку сажают в мае, а азиатские муссоны зимой дуют. Ежегодно переписывать все сельскохозяйственные календари выходит намного накладне, чем добавлять один день раз в четыре года.
                                                                      0

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

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

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

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

                                                                          И всегда в один и тот же день недели? В понедельник, например :)

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

                                                                          А вообще у нас глобальное потепление, все дела, через 100-150 лет будет вечное лето (или зима, как пойдёт), мб и календарь подправят)
                                                                            0
                                                                            Вот я тоже покурил, покумекал, и пришёл к выводу, что не меняют Календарь из-за удобства регламентирования например рабочих недель. То есть, что бы избежать кошмара работодателя. Пожалуй эта главная зависимость в современном мире от корректируемого календаря и времени суток
                                                                            +2
                                                                            Южному полушарию, вроде бы, это ни капельки не мешает…

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


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

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


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


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

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

                                                                              Я вот только недавно осознал что уже май, когда оставил машину на солнце на целый день… А до этого у меня был примерно март. Вот, наверное, в этом полезна привязка месяцев к временам года, чтоб такие потерянные как я поменьше терялись во времени)
                                                                                0
                                                                                Да. Потому что мешает не тот факт, что новый год летом, а тот факт, что он будет постепенно «плыть» от зимы к лету.
                                                                                Только потому что вы, привыкли к этому постоянству. А так это не мешает
                                                                                  +1
                                                                                  особенно растениям. фиг с ним, будем зимой сажать )
                                                                                    0
                                                                                    Это просто все привыкли к тому, что растения надо сажать в определённые месяцы — но всё-равно с учётом погоды, времени суток и т.п. — во время ливня, например, картошку сажать сложно, а ночью — хоть и можно, но зачем…

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

                                                                                    В мусульманском календаре вон начало месяца определяется даже не по новолунию, а в день, когда после новолуния месяц на небе стал видимым! А это 1-3 дня от новолуния и засвидетельствовать это должны 2 сильно авторитетных мусульманина!
                                                                              0
                                                                              Нет уже были високосные года и часовые пояса.
                                                                              Зачем добавлять ещё секунды? Можно подождите, пока время не уйдёт на час и смените часовой пояс. И от 29 февраля никто не предлагал отказываться.
                                                                                0
                                                                                Зачем добавлять ещё секунды?

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


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

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


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

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


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


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

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

                                                                          –6
                                                                            +4
                                                                            Не unix, а локальная ветка. Результат какой?
                                                                              +6
                                                                              Кранты Союзу. Где теперь локальную ветку развивают?
                                                                                +4
                                                                                Там же, где и раньше — глубоко под землей, на ПЭВМ, собранных на серии К1590.
                                                                              +5
                                                                              нет не было такого времени, хватит спамить.
                                                                              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 в СССР» науке не известна.
                                                                                –13

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

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

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

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

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


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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

                                                                                                  Там скорее разные геополитические факторы учитываются еще или что-то в таком духе, лень изучать.
                                                                                                  0
                                                                                                  > Был баг даже пару лет назад в этой части когда какая-то бяка произошла после вставки високосной секунды.

                                                                                                  уточню, в 12-ом году:
                                                                                                  bugs.mysql.com/bug.php?id=65778
                                                                                                  habr.com/ru/post/146863
                                                                                          +1
                                                                                          Важный момент, который вы, кажется, не уловили: unixtime — это не эквивалент UTC, а вполне себе отдельная таймзона, у которой свои свойства. Наличие високосных секунд — это свойство таймзоны UTC, которое принципиально отсутствует в unixtime. Отсюда все эти пляски с подкручиванием unixtime назад.
                                                                                          +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 время в локальной таймзоне, что вызывает массу "фифектов фикции".
                                                                                            0
                                                                                            Как бы, с одной стороны, да, задумывали количество «TAI секунд» («атомных») прошедших с точки отчета (Epoch). Но как бы, с другой стороны, нет, т.к. сложившаяся практика поддержания баз временных зон не содержит дополнительных секунд по умолчанию, ну а NTP или иные способы задания времени, синхронизирует по текущему UTC в момент синхронизации.

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

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


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

                                                                                                0
                                                                                                Хм. Это часть «как бы да», а часть «как бы нет» можете взглянуть на своей системе.
                                                                                                $ 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 их не признаёт), т.е. без поддержки дополнительных секунд.
                                                                                                  0
                                                                                                  Когда эту «совместимость со старыми зонами» по умолчанию устанавливают чуть более, чем все, это не совместимость, это и есть основной вариант: то, что называется UTC в Unix и Unix-like, это тот вариант, в котором вставных секунд (или, наоборот, забранных секунд, если бы такое вводили) нет и не будет. Глава Posix, посвящённая расчёту времени, устанавливает формулы, которые ничего не знают про вставные секунды, и это важнее формального факта применения термина «UTC».
                                                                                                  То же на практике касается и Windows (и т.наз. NT time в ней), хотя стандарта на это нет.

                                                                                                  Конечно, безумец может установить себе таймзону типа right/UTC, но при этом у него сломается всё, что можно.

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

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

                                                                                                  P.S.
                                                                                                  Смысл эксперимента, конечно, сомнительный. К примеру, эпоха входит в кучу таблиц (полиномов) по движению Луны, планет, спутников, вращению Земли, и т.п., а так же данных по переменным звёздам, пульсарам, квазарам и т.п. Вы их тоже прячете или нет? Если нет, то ответ тоже однозначный, но положительный — очень быстро и очень точно.
                                                                                                    0
                                                                                                    Все, что использует более точное наведение, чем «кручу на глаз», требует часы для расчетов направления. Незадача.
                                                                                                      0
                                                                                                      С точность, превосходящую эталонные часы. По пульсарам. Т.к. их много, то комбинация задержек между сигналами будет уникальной на долгом протяжении времени.
                                                                                                      Если и будет повторятся, то примерное время можно будет посмотреть по взаимному расположению тел солнечной системы, а точное опять-же по пульсарам.
                                                                                                      +1
                                                                                                      Если стартовать в 23:59:60.50 и подождать полсекунды, время Unix возвращается на полсекунды, а метка времени Unix 101 соответствует двум секундам UTC.

                                                                                                      Какие еще полсекунды, если время Unix это целочисленное число?
                                                                                                        0
                                                                                                        Нет, «время Unix» может быть указано с какой угодно точностью, например:

                                                                                                        $ python3                                          
                                                                                                        Python 3.6.7 (default, Oct 22 2018, 11:32:17) 
                                                                                                        [GCC 8.2.0] on linux
                                                                                                        Type "help", "copyright", "credits" or "license" for more information.
                                                                                                        >>> import time
                                                                                                        >>> print(time.time(), time.time())
                                                                                                        1559375816.5301785 1559375816.5301788
                                                                                                        


                                                                                                        между вызовами, как видим, прошло около 300 наносекунд, и это видно в представлении (в double).

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

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

                                                                                                          0
                                                                                                          Пульсары на два порядка менее точны чем современные атомные часы: уход в 1/10^17 против 1/10^15 у пульсаров.
                                                                                                            0
                                                                                                            Возможно, моя информация устарела, но у пульсаров точность как минимум БЫЛА выше, чем у атомных часов.
                                                                                                              0
                                                                                                              Там наверное нужно учитывать на каком временном промежутке измеряется стабильность.

                                                                                                              Если брать популярное изложение, то вот тут пишут:
                                                                                                              “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

                                                                                                              Ну и вообще по логике атомные эффекты должны быть более стабильны чем нейтронная звезда, которая теряет энергию постоянно и замедляется.
                                                                                                                0
                                                                                                                Вспоминаю историю, когда из США к нам приехали астрономы со своими часами. Заселились в гостиницу, воткнули в розетку и ушли.
                                                                                                                Уборщица выдернула, аккумулятор разрядился, и астрономы поехали обратно за новым стандартом времени.
                                                                                                                Атомные эффекты может и стабильнее, а вот часы-совсем не факт на длительных промежутках времени. А скорость замедление пульсаров и прогнозировать можно.
                                                                                                                  0
                                                                                                                  Ну, как видно «наземные» часы имеют восходящий тренд точности, а пульсары — скорее нисходящий. Вполне возможно что в будущем точностью атомных часов будет улучшена (в цитате выше приводят тренд «на 1 порядок в 10 лет»).

                                                                                                                  Ну и использовать пульсары на практике, наверное, не очень удобно, даже если бы они были гораздо точнее.
                                                                                                                    0
                                                                                                                    В вашей же цитате указано, что точность пульсаров тоже увеличивается. Просто медленнее.
                                                                                                                    По поводу удобства смотря для чего. Астрономы очень радовались, когда открыли 2 пульсара в одной системе. Получается есть двое точных часов в одной системе и можно проверять ОТО.
                                                                                                                    Пульсары удобны тем, что за обозримый период с ними ничего не случится. Не будет уборщицы, которая выдернет розетку.
                                                                                                                    От атомных часов нужно ещё получить сигнал с постоянной задержкой(если время вам нужно не рядом с часами). С пульсарами мне кажется всё несколько проще.
                                                                                                          –1
                                                                                                          Unix time определено в промежутке между 13 декабря 1901 года, 20:45:52 и 19 января 2038 года в 03:14:08. Это 2^31 секунд. После этого переменная переполнится и круг замкнется.
                                                                                                            +1
                                                                                                            Unix time не привязано к 32 битам, и во многих местах уже перешли на 64, которые дают диапазон больше возраста вселенной.

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

                                                                                                          Самое читаемое