В процессе разработки на платформе 1С:Предприятие 8.3 программисты часто сталкиваются с вопросами точности вычислений. Один из таких вопросов касается работы с датами, а именно — учета так называемой «високосной секунды». Давайте разберемся, как устроена работа со временем в 1С и почему попытки манипулировать 60-й секундой не приводят к успеху.
В платформе 1С тип Дата жестко стандартизирован. Внутренняя структура этого типа данных предусматривает хранение значений в диапазоне от 0 до 59 секунд. Если вы попытаетесь программно или через форму ввести время, например, 31.01.2009 23:59:60, платформа выдаст ошибку или нормализует значение, переведя его в 00:00:00 следующего дня.
Это ограничение не является недоработкой фирмы «1С». Оно продиктовано архитектурой операционных систем, на которых работает сервер 1С, в частности, Windows. Операционная система получает данные о времени от аппаратных часов и протоколов синхронизации, но не умеет «видеть» 60-ю секунду в формате ISO 8601. Таким образом, платформа 1С просто транслирует то время, которое ей предоставляет ОС.
Рассмотрим, что происходит, когда наступает момент вставки дополнительной секунды в мире IT:
Так как 1С работает с СистемнымВременем, любые попытки учета високосной секунды внутри бизнес-логики приложения будут конфликтовать с тем, как ОС подает время. Поэтому для стандартных задач учета, логистики или продаж добавление 86400 секунд к суткам является единственно верным и общепринятым стандартом.
Если ваша задача требует высокой точности в расчетах (например, для научных вычислений или высокочастотного трейдинга), стандартных средств 1С будет недостаточно. Однако для подавляющего большинства учетных задач придерживайтесь следующих правил:
Если вы все же столкнулись с задачей, где учет високосных секунд жизненно необходим, решение лежит за пределами стандартного языка 1С:
Разберем возможный путь реализации:
ВнешнейКомпоненты (на языке C++ или C#), которая напрямую обращается к высокоточным источникам времени (NTP-серверы с поддержкой Leap Seconds).TAI (Международное атомное время), которая идет линейно и не учитывает високосные секунды.Подводя итог, можно сказать, что 1С — это инструмент для бизнеса, который опирается на общепринятые стандарты времени, принятые в операционных системах. Использование 60-й секунды не поддерживается на уровне платформы, поэтому планируйте свои алгоритмы, основываясь на стандартной шкале времени, и не перегружайте код избыточной логикой коррекции, которая не будет соответствовать системному времени вашего сервера.