Код
#Тесты

Тест: насколько хорошо вы понимаете время?

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

Кадр: фильм «Интерстеллар»

Эйнштейн доказал, что время относительно, программисты — что оно может закончиться в 2038 году, а Хайдеггер выдвинул гипотезу, что время — это мультифеномены бытия.
Кажется, что правильно посчитать время — тривиальная задача даже для начинающего программиста. Но что, если при этом нужно учесть часовой пояс, переход на летнее время, особенности местного календаря и даже вращение планеты? Проверьте свои знания на десяти обманчиво простых вопросах.
Начать тест
Окей, начнём с простого: сколько времени в сутках?
В бытовой жизни — да, 24 часа, но когда речь идёт о стандартах времени, начинаются различия. Раз в полтора-два года 30 июня или 31 декабря день может закончиться вот так: 23:59:60. Это дополнительная, или високосная, секунда, которая нужна для того, чтобы сравнять фактическое время вращения Земли со стандартом UT и UTC. 

Если эту секунду не добавить, могут проявиться разные сбои. Например, в 2016 году 31 декабря была добавлена високосная секунда и на серверах Cloudflare произошла ошибка — DNS-прокси переключился на отрицательное значение, и это привело к массовому сбою. 

Поэтому от високосной секунды планируют отказаться после 2035 года, что может снова привести к ошибкам — тот же ГЛОНАСС её учитывает и без неё может засбоить.
Верно! Раз в полтора-два года 30 июня или 31 декабря день может закончиться вот так: 23:59:60. Это дополнительная, или високосная, секунда, которая нужна для того, чтобы сравнять фактическое время вращения Земли со стандартом UT и UTC. 

Если эту секунду не добавить, могут проявиться разные сбои. Например, в 2016 году 31 декабря была добавлена високосная секунда и на серверах Cloudflare случилась ошибка — DNS-прокси переключился на отрицательное значение, и это привело к массовому сбою.

Поэтому от високосной секунды планируют отказаться после 2035 года, что может снова привести к ошибкам — тот же ГЛОНАСС её учитывает и без неё может засбоить.
Дальше
Проверить
Узнать результат
В сутках ровно 24 часа или могут быть ещё варианты?
Точно. Всё дело в переводе часов на летнее и зимнее время, когда происходит прибавление одного часа весной и убавление его осенью. 

Регулирование перехода различается от страны к стране — в США и Европе его всё ещё используют, в России, Азии и Африке отказались либо не использовали вообще. Всё это нужно учитывать при написании кода, иначе возможны ошибки и сбои.
Не-а. Перевод часов на летнее и зимнее время — это прибавление часа весной и убавление его осенью. Из-за этого количество времени в сутках может меняться. 

Регулирование перехода различается от страны к стране — в США и Европе его всё ещё используют, в России, Азии и Африке отказались либо не использовали вообще. Всё это нужно учитывать при написании кода, иначе возможны ошибки и сбои.
Дальше
Проверить
Узнать результат
На летнее и зимнее время переходит вся страна?
Верно. Мало того что отношение к переходу на зимнее время может различаться даже в странах, находящихся в одном полушарии, так ещё и внутри стран не все «смогли договориться». 

Например, в США есть резервация Навахо-Нейшен, где часы переводят, а внутри неё есть ещё одна резервация, Хопи, где стрелки никто не трогает. В итоге в этих местах время будет различаться.
Всё опять сложно. Мало того что отношение к переходу на зимнее время может различаться даже в странах, находящихся в одном полушарии, так ещё и внутри стран не все «смогли договориться». 

Например, в США есть резервация Навахо-Нейшен, где часы переводят, а внутри неё есть ещё одна резервация, Хопи, где стрелки никто не трогает. В итоге в этих местах время будет различаться.
Дальше
Проверить
Узнать результат
Окей, с часами и летним временем всё понятно. А что с секундой — это постоянная величина или она тоже может меняться?
Не-а. В отличие от суток, с секундой всё в порядке — это постоянная единица измерения времени, которая равна 9 192 631 770 периодам излучения атома цезия-133. 

Секунды входят в Международную систему единиц — это научные стандарты, которые используются в технике и исследованиях. Секунду можно дробить на сотые и тысячные доли, но сама она всегда длится одно и то же время.
Да! В отличие от суток, с секундой всё в порядке — это постоянная единица измерения времени, которая равна 9 192 631 770 периодам излучения атома цезия-133. 

Секунды входят в Международную систему единиц — это научные стандарты, которые используются в технике и исследованиях. Секунду можно дробить на сотые и тысячные доли, но сама она всегда длится одно и то же время.
Дальше
Проверить
Узнать результат
Можно ли синхронизировать компьютер или сервер с атомными часами напрямую?
Да, это вполне реально. Все устройства в Сети синхронизируются по протоколу Network Time Protocol (NTP). Внутри него — три класса серверов, первый из которых синхронизируется напрямую с атомными часами и определяет время с точностью до одной триллионной секунды. 

Он передаёт данные на серверы «пониже» — на них уже не такая высокая точность. Например, один из самых популярных серверов такого типа — Stratum 3 — показывает время с точностью лишь до секунды.

Если для вашего проекта нужна точность до одной тысячной секунды, то придётся обращаться к владельцам сервера первого уровня напрямую либо создавать свои атомные часы.
Похоже, вы ни разу не работали с протоколом Network Time Protocol (NTP), серверы которого синхронизируют все устройства в интернете.

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

Правда, таких серверов очень мало и подключиться к ним напрямую не получится — обычно они общаются только с серверами следующего за ними уровня. Наиболее популярный тип «машин времени» — Stratum 3 — показывает время с точностью до секунды.

Если для вашего проекта нужна точность до одной тысячной секунды, то придётся обращаться к владельцам сервера первого уровня напрямую либо создавать свои атомные часы.
Дальше
Проверить
Узнать результат
Теперь попробуем охватить более глобальные вещи. На Земле существует только 24 часовых пояса?
Не-а. Кроме географии есть ещё и административное деление, когда время устанавливают сами люди, исходя из своих целей и интересов. Сейчас таких «частных» часовых поясов более 300 штук. 

Наиболее ярко это проявилось в островных государствах Тихого океана, где время может быть одинаковым, но при этом даты разные, — какие-то острова стремятся остаться в «прошлом», другие — в «будущем». Из-за этого линия перемены дат сильно изломана.
Верно. Кроме географии есть ещё и административное деление, когда время устанавливают сами люди, исходя из своих целей и интересов. Сейчас таких «частных» часовых поясов более 300 штук. 

Наиболее ярко это проявилось в островных государствах Тихого океана, где время может быть одинаковым, но при этом даты разные, — какие-то острова стремятся остаться в «прошлом», другие — в «будущем». Из-за этого линия перемены дат сильно изломана.
Дальше
Проверить
Узнать результат
Отправимся теперь за пределы нашей планеты. На Земле часы регулирует стандарт Всемирного координированного времени (UTC). Есть ли подобная система на Марсе?
Нужно. На Марсе нет часовых поясов, и все посадочные миссии использовали местное солнечное время как точку отсчёта.

Здесь есть свой стандарт Координированного марсианского времени (Coordinated Mars Time, MTC), который был придуман ещё в 2000 году. Но он пока что не получил практического применения — для посадки и управления марсоходами и кораблями нужно точно знать расположение относительно нулевого меридиана, который проходит по кратеру Эйри-0. Технически сделать это сложно, поэтому проще и надёжней использовать отсчёт относительно времени на планете к Солнцу.

Вряд ли, конечно, вам придётся писать код для марсианских программ, но такой подход к отсчёту времени отражает простую истину: иногда чем проще — тем лучше.
В точку! На Марсе нет часовых поясов, а все посадочные миссии использовали местное солнечное время как точку отсчёта. 

Да, здесь есть свой стандарт Координированного марсианского времени (Coordinated Mars Time, MTC), который был придуман ещё в 2000 году. Но он пока что не получил практического применения — для посадки и управления марсоходами и кораблями нужно точно знать расположение относительно нулевого меридиана, который проходит по кратеру Эйри-0. Технически сделать это сложно, поэтому проще и надёжней использовать отсчёт относительно времени на планете к Солнцу.

Вряд ли, конечно, вам придётся писать код для марсианских программ, но такой подход к отсчёту времени отражает простую истину: иногда чем проще — тем лучше.
Дальше
Проверить
Узнать результат
У времени есть начало и конец? Вопрос не философский 🙂
В точку. Существует проблема 2038 года — это ожидаемые сбои в работе техники. Проблема в старых 32-битных системах, в которых тип данных time_t мог хранить секунду только в виде 32-битного целого числа. 

В итоге 19 января 2038 года битов перестанет хватать для хранения дат. После этого тип данных может быть только отрицательным, что приводит к закольцованности и ошибкам в вычислениях.

Проблема затрагивает Linux, iOS, Windows и в целом вполне решаема — например, в Linux Kernel 5.6 она уже устранена.
С научной точки зрения — да. Но в программировании существует проблема 2038 года, когда ожидаются сбои в работе техники и кода. Проблема в старых 32-битных системах, в которых тип данных time_t мог хранить секунду только в виде 32-битного целого числа. 

В итоге 19 января 2038 года битов перестанет хватать для хранения дат. После этого тип данных может быть только отрицательным, что приводит к закольцованности и ошибкам в вычислениях.

Проблема затрагивает Linux, iOS, Windows и в целом вполне решаема — например, в Linux Kernel 5.6 она уже устранена.
Дальше
Проверить
Узнать результат
А что насчёт недели — это всегда семь дней или её продолжительность может меняться?
Верно — во всех странах действует семидневная неделя, но вот структура выходных и рабочих дней может меняться. 

При обновлении серверов или софта стоит учитывать, что большая часть населения планеты начинает неделю не с понедельника, а с воскресенья. 

Кроме того, существуют и другие локальные различия: в Индии всего один выходной, а в восточном штате Малайзии Сараваке выходные плавающие — хотя есть и «стабильные» рабочие дни: понедельник, четверг и суббота.
Никто пока что не живёт по восьми- или десятидневной неделе. Во всех странах действует семидневная неделя, но вот структура выходных и рабочих дней может меняться. При обновлении серверов или софта стоит учитывать, что большая часть населения планеты начинает неделю не с понедельника, а с воскресенья. 

Кроме того, существуют и другие локальные различия: в Индии всего один выходной, а в восточном штате Малайзии Сараваке выходные плавающие — хотя есть и «стабильные» рабочие дни: понедельник, четверг и суббота.
Дальше
Проверить
Узнать результат
Финальный вопрос: дни в календаре иногда пропускают или такого никогда не случалось?
Да, есть два относительно свежих примера: в 2011 году Самоа перескочило один день перед Новым годом, чтобы оказаться на западной стороне линии перемены дат и оптимизировать торговлю с Австралией. В 1993 году подобное сделали в Республике Маршалловы Острова — в летнюю ночь был совершён прыжок с пятницы на воскресенье.
А вот и нет, есть два относительно свежих примера. В 2011 году Самоа перескочило один день перед Новым годом, чтобы оказаться на западной стороне линии перемены дат и оптимизировать торговлю с Австралией. В 1993 году подобное сделали в Республике Маршалловы Острова — в летнюю ночь был совершён прыжок с пятницы на воскресенье.
Дальше
Проверить
Узнать результат
Да, время непостижимо. Кажется, вы никогда не сталкивались с проблемами временных зон и синхронизации часов в софте. Даже немного завидуем. Если голова не пошла кругом к концу теста — обратите внимание на наш курс «Профессия Инженер по тестированию», где мы с нуля обучаем тонкому искусству поиска ошибок в коде и проверке программ на прочность.
Пройти ещё раз
Для вас время — это просто. Вы смогли ответить правильно примерно на половину вопросов. Если голова не пошла кругом к концу теста — обратите внимание на наш курс «Тестировщик ПО», где мы с нуля обучаем тонкому искусству поиска ошибок в коде и проверке программ на прочность.
Пройти ещё раз
Вы таймлид. Общая эрудиция и знание географии позволили вам ответить правильно на большинство вопросов, поздравляем! Если голова не пошла кругом к концу теста — обратите внимание на наш курс «Тестировщик ПО», где мы с нуля обучаем тонкому искусству поиска ошибок в коде и проверке программ на прочность.
Пройти ещё раз
Вы настоящий взломщик времени. Кажется, проблемы временных зон и синхронизации часов в софте — ваша ежедневная рутина. Осталось только разобраться с личным временем и загруженностью команды — обратите внимание на наш курс «Профессия TeamLead», где мы обучим правильно оценивать, приоритизировать и делегировать задачи.
Пройти ещё раз
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована