Как привести дату к формату ISO 8601 в 1С?

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

При интеграции 1С с внешними системами, веб-сервисами или при формировании JSON/XML файлов часто возникает необходимость привести тип Дата к строковому представлению международного стандарта ISO 8601, например: 2018-09-28T15:17:44+03:00. Давайте подробно разберем, как реализовать это в коде 1С.

Способ 1: Использование функции ЗаписатьДатуJSON

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

Рассмотрим пример использования:


ДатаISO = "" + ЗаписатьДатуJSON(УниверсальноеВремя(ТекущаяДата), 
    ФорматДатыJSON.ISO, 
    ВариантЗаписиДатыJSON.ЛокальнаяДатаСоСмещением);

Здесь мы используем метод ЗаписатьДатуJSON, который корректно преобразует локальную дату со смещением в строку формата ISO. Это лучший выбор для обмена данными, так как платформа сама берет на себя расчет смещения часового пояса.

Способ 2: Ручное формирование строки с учетом смещения

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

Разберем создание функции, которая будет динамически рассчитывать смещение:


Функция ДатаВФорматеXML(НужнаяДата) Экспорт
    СмещениеВСекундах = СмещениеСтандартногоВремени(ЧасовойПоясСеанса, НужнаяДата);
    Часов = Цел(СмещениеВСекундах / 3600);
    СекОстМин = СмещениеВСекундах % 3600;
    Минут = Цел(СекОстМин / 60);
    
    Возврат Формат(НужнаяДата, "ДФ=гггг-ММ-ддTЧЧ:мм:сс") + "+" 
        + Формат(Часов, "ЧЦ=2; ЧН=00; ЧВН=") + ":" 
        + Формат(Минут, "ЧЦ=2; ЧН=00; ЧВН=");
КонецФункции

Почему это надежно:

  1. Использование функции СмещениеСтандартногоВремени позволяет корректно определять сдвиг относительно UTC с учетом настроек часового пояса сеанса.
  2. Форматирование через Формат с шаблоном гггг-ММ-ддTЧЧ:мм:сс гарантирует, что дата будет представлена в стандартном цифровом виде независимо от региональных настроек компьютера, на котором выполняется код.
  3. Мы явно добавляем разделитель + и вычисляем минуты и часы смещения, что делает строку полностью соответствующей спецификации.

Способ 3: Использование СериализатораXDTO

Для работы с веб-сервисами часто применяют объект СериализаторXDTO. Он автоматически преобразует типы 1С в XML-представление.

ДатаСтрокой = СериализаторXDTO.XMLСтрока(НужнаяДата);

Следует учитывать, что данный метод может добавить суффикс Z (Zulu time), что означает UTC (смещение +00:00). Если принимающая сторона ожидает конкретный часовой пояс, вам придется дополнительно обработать полученную строку, заменив Z на нужное вам смещение.

Основные рекомендации по работе с датами

Чтобы избежать проблем при реализации обмена, обратите внимание на следующие моменты:

Подводя итог, если вы хотите сделать код максимально устойчивым к изменениям, используйте методы платформы ЗаписатьДатуJSON или СериализаторXDTO. Если же требования стороннего сервиса специфичны и требуют точной подстройки формата смещения, используйте функцию ручной сборки с вычислением через СмещениеСтандартногоВремени.

← На главную