Как отформатировать дату в 1С с указанием временной зоны и смещения часового пояса

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При выгрузке данных, интеграции со сторонними веб-сервисами или формировании отчетов часто требуется вывести дату с указанием смещения часового пояса, например 2018-01-19 16:45:59 +03 или +05. Разберем, как решить эту задачу в платформе 1С:Предприятие.

Ограничение маски формата ДФ

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

Способ 1. Ручное вычисление и форматирование смещения

Рассмотрим, как получить смещение часового пояса в часах и отформатировать его с гарантированным выводом двух цифр (с ведущим нулем).

Для получения величины смещения используется функция СмещениеСтандартногоВремени(), принимающая часовой пояс. Функция возвращает значение в секундах, поэтому делим его на 3600 (количество секунд в часе). Чтобы полученное число форматировалось с ведущим нулем (например, 03 вместо 3), используем параметры ЧЦ=2 (длина целой части) и ЧВН= (вывод ведущих нулей):


РезультатСтрока = Формат(ТекущаяДата(), "ДФ=""гггг-ММ-дд ЧЧ:мм:сс""") 
    + " +" 
    + Формат(СмещениеСтандартногоВремени(ЧасовойПояс()) / 3600, "ЧЦ=2; ЧВН=; ЧГ=");

Проанализируем параметры форматной строки для числа:

  1. ЧЦ=2 — задает максимальное количество цифр целой части.
  2. ЧВН= — включает отображение незначащих ведущих нулей.
  3. ЧГ= — отключает разделитель триад тысяч, чтобы исключить нежелательные пробелы.

Важные нюансы работы с часовыми поясами

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

  1. Разница между ЧасовойПояс() и ЧасовойПоясСеанса(): Функция ЧасовойПояс() возвращает пояс операционной системы сервера или ПК. Если программа работает в клиент-серверном режиме или с пользователями из разных регионов, правильнее применять ЧасовойПоясСеанса().
  2. Отрицательные смещения: Для поясов со смещением к западу от Гринвича (например, UTC-05:00) жесткое добавление знака + приведет к ошибке формата. В универсальном коде стоит динамически определять знак (плюс или минус) в зависимости от того, положительно или отрицательно смещение.
  3. Дробные часовые пояса: Существуют часовые пояса со смещением, кратным не часам, а минутам (например, +03:30 или +05:45). Если требуется поддержка таких регионов, часы и минуты рассчитываются отдельно через остаток от деления.

Способ 2. Использование формата ISO 8601 через ЗаписатьJSON

Если перед вами стоит задача сформировать дату со смещением в общепринятом стандарте ISO 8601 (например, 2018-01-19T16:45:59+03:00), можно применить механизм сериализации JSON, встроенный в 1С:


ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();

НастройкиЗаписи = Новый НастройкиЗаписиJSON;
НастройкиЗаписи.ФорматДаты = ФорматДатыJSON.ISO;
НастройкиЗаписи.ВариантЗаписиДаты = ВариантЗаписиДатыJSON.ЛокальнаяДатаСоСмещением;

ЗаписатьJSON(ЗаписьJSON, ТекущаяДата(), НастройкиЗаписи);
СтрокаISO = ЗаписьJSON.Закрыть();

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

← На главную