При интеграции 1С с внешними системами, веб-сервисами или при формировании JSON/XML файлов часто возникает необходимость привести тип Дата к строковому представлению международного стандарта ISO 8601, например: 2018-09-28T15:17:44+03:00. Давайте подробно разберем, как реализовать это в коде 1С.
Если вы работаете в современной платформе, самый надежный и простой способ — использовать штатный механизм сериализации. Этот метод автоматически учитывает часовой пояс и избавляет нас от ручной склейки строк, что минимизирует вероятность ошибок.
Рассмотрим пример использования:
ДатаISO = "" + ЗаписатьДатуJSON(УниверсальноеВремя(ТекущаяДата),
ФорматДатыJSON.ISO,
ВариантЗаписиДатыJSON.ЛокальнаяДатаСоСмещением);
Здесь мы используем метод ЗаписатьДатуJSON, который корректно преобразует локальную дату со смещением в строку формата ISO. Это лучший выбор для обмена данными, так как платформа сама берет на себя расчет смещения часового пояса.
Иногда требуется жестко заданный формат, который не всегда совпадает с результатом стандартных методов сериализации. В таком случае мы можем собрать строку вручную. Важно учитывать текущий часовой пояс, чтобы получить верное смещение (например, +03:00).
Разберем создание функции, которая будет динамически рассчитывать смещение:
Функция ДатаВФорматеXML(НужнаяДата) Экспорт
СмещениеВСекундах = СмещениеСтандартногоВремени(ЧасовойПоясСеанса, НужнаяДата);
Часов = Цел(СмещениеВСекундах / 3600);
СекОстМин = СмещениеВСекундах % 3600;
Минут = Цел(СекОстМин / 60);
Возврат Формат(НужнаяДата, "ДФ=гггг-ММ-ддTЧЧ:мм:сс") + "+"
+ Формат(Часов, "ЧЦ=2; ЧН=00; ЧВН=") + ":"
+ Формат(Минут, "ЧЦ=2; ЧН=00; ЧВН=");
КонецФункции
Почему это надежно:
СмещениеСтандартногоВремени позволяет корректно определять сдвиг относительно UTC с учетом настроек часового пояса сеанса.Формат с шаблоном гггг-ММ-ддTЧЧ:мм:сс гарантирует, что дата будет представлена в стандартном цифровом виде независимо от региональных настроек компьютера, на котором выполняется код.+ и вычисляем минуты и часы смещения, что делает строку полностью соответствующей спецификации.Для работы с веб-сервисами часто применяют объект СериализаторXDTO. Он автоматически преобразует типы 1С в XML-представление.
ДатаСтрокой = СериализаторXDTO.XMLСтрока(НужнаяДата);
Следует учитывать, что данный метод может добавить суффикс Z (Zulu time), что означает UTC (смещение +00:00). Если принимающая сторона ожидает конкретный часовой пояс, вам придется дополнительно обработать полученную строку, заменив Z на нужное вам смещение.
Чтобы избежать проблем при реализации обмена, обратите внимание на следующие моменты:
"+03:00" всегда рассчитывайте смещение динамически. Это защитит ваш код при переходе на другое время или при смене часового пояса сервера.Сообщить() или посмотрите его в окне табло отладчика, чтобы убедиться в отсутствии лишних символов или пробелов.Подводя итог, если вы хотите сделать код максимально устойчивым к изменениям, используйте методы платформы ЗаписатьДатуJSON или СериализаторXDTO. Если же требования стороннего сервиса специфичны и требуют точной подстройки формата смещения, используйте функцию ручной сборки с вычислением через СмещениеСтандартногоВремени.