Примерно раз в 3 года к нашему времени добавляется високосная секунда - лишняя секунда с номером 60, вставляемая в конце июня или декабря, чтобы наше время зачем-то соответствовало с высокой точностью какому-то "всемирному" неравномерному(!!!) времени, определяемому по положению Земли относительно квазаров.
Надеюсь, вы все прочувствовали важность этого действа для народного хозяйства )))
Мне очень понравилась фраза в википедии
Однако в связи с неудобством, создаваемым коррекцией часов для программистов, Международный союз телекоммуникаций предлагает отказаться от подобной практикиИ даже на минуту показалось, что кого-то в этом мире волнуют проблемы программистов! Как мило... Скупая слеза программиста скатилась по физиономии и пропала, запутавшись в бороде.
Но вернёмся от фантазий к реальности.
А реальность бьёт фейсом от тейбл вовсе не программистов, а юзеров.
Одни страдают от
повисших серверов, другие вынуждены
закрывать на час биржи (причём вопрос не только в потенциальной возможности некорректной работы софта, но и в том, к каким суткам закон отнесёт ту лишнюю секунду, в течение которой была заключена сделка).
Короче, нехилый такой источник неожиданных проблем.
читать дальшеА мыши упрямо грызут кактус.
Как бы технически грамотно решить эту (по сути, нетехническую) проблему?
Очень похоже, что истинный виновник - человеческий фактор, а именно, жадность: хочу всё и сразу, пусть системные часы в операционной системе на моём компьютере показывают самое точное в мире время!
А про то, что работать с такими часами уже не так легко и просто, забывают.
Например, чтобы прибавить минуту к текущему времени, уже нельзя привычным движением руки написать "+60", вместо этого придётся вызывать специальную функцию.
Давайте начнём с простого - отделим мух от котлет. В принципе, высокая точность кому-то нужна. Но не большинству. Поэтому пусть эти проблемы распутывает меньшинство, а не все подряд.
Есть замечательные атомные часы. Грубо говоря, на выходе имеется счётчик колебаний, какое-то количество которых по определению равно 1 секунде.
Вот это пусть и будет "компьютерное" время, единое для всех.
В обычных приложениях пусть программист тупо делит этот счётчик на количество колебаний в сутках и получает дату (TDateTime в паскале), которая его полностью устраивает. Такое время соответствет нашей интуиции, использовать его легко и просто!
А в необычных приложениях пусть уж ебётся с алгоритмами, учитывающими правильную коррекцию всех секунд, добавленных пакостниками из ITU (разумеется, такие приложения должны иметь какой-то механизм получения обновлений для этого алгоритма). Такое время нелинейно, нужно быть крайне осторожным.
Пример: пусть программист Вася пишет интернет-магазин, который открывается в 10 утра и закрывается в 7 вечера (заказчики иногда бывают такие выдумщики!).
Перед Васей стоит выбор: использовать ему для проверки времени открытия/закрытия магазина полностью интуитивно понятное приблизительное время или абсолютно точное, но непредсказуемое.
Вася сам решит, на какую глубину неприятностей он готов зайти ради точности часов. Для нас главное, что поскольку это решение принято Васей лично, ему легче гарантировать работоспособность софта.
Если вы пишете для встраиваемой системы, у которой есть и интуитивно понятное время (обычный аппаратный таймер, инициализированный правильным временем один раз при загрузке системы) и хитрожопое (от подключенного GPS), то вы уже явно понимаете имеющиеся риски.
Мораль басни:
Это же так просто и естественно - не пытаться объединить в одном объекте (системные часы) противоречивые требования.