Как преобразовать строку с датой и временем в американском формате в тип Дата в 1С?

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

Часто при обмене данными с внешними системами, API или при импорте файлов мы сталкиваемся с форматами даты, которые не соответствуют стандартным ожиданиям платформы 1С. Одним из таких «сложных» форматов является американский стандарт: ММ/ДД/ГГГГ ЧЧ:ММ:СС AM/PM. Прямое использование конструктора Дата() для такой строки приведет к ошибке преобразования, так как 1С ожидает канонический формат или локальные настройки системы.

Давайте разберем, как правильно и надежно решить эту задачу, написав собственную функцию парсинга.

Основные принципы преобразования

Для того чтобы преобразовать строку вида 4/19/2022 10:56:27 PM в объект Дата, нам нужно выполнить следующие действия:

  1. Разделить строку на логические части: дату, время и признак периода (AM/PM).
  2. Извлечь числовые значения года, месяца, дня, часов, минут и секунд.
  3. Обработать логику 24-часового формата: учесть, что 12 PM — это полдень, а 12 AM — это полночь.
  4. Собрать дату с помощью конструктора Дата().

Пошаговое решение задачи

Рассмотрим детальный пример кода, который позволяет выполнить эту операцию. Мы будем использовать стандартные методы работы со строками, такие как СтрРазделить().


Пример = "4/19/2022 10:56:27 PM";

// Разделяем строку на дату, время и признак PM/AM
Строки = СтрРазделить(Пример, " "); 
ДатаЧасть = Строки[0]; 
ВремяЧасть = Строки[1]; 
Признак = Строки[2];

// Разбираем дату на компоненты
КомпонентыДаты = СтрРазделить(ДатаЧасть, "/");
Месяц = Число(КомпонентыДаты[0]);
День = Число(КомпонентыДаты[1]);
Год = Число(КомпонентыДаты[2]);

// Разбираем время на компоненты
КомпонентыВремени = СтрРазделить(ВремяЧасть, ":");
Час = Число(КомпонентыВремени[0]);
Минута = Число(КомпонентыВремени[1]);
Секунда = Число(КомпонентыВремени[2]);

// Корректируем часы для 24-часового формата
Если Признак = "AM" Тогда
    Если Час = 12 Тогда
        Час = 0;
    КонецЕсли;
ИначеЕсли Признак = "PM" Тогда
    Если Час <> 12 Тогда
        Час = Час + 12;
    КонецЕсли;
КонецЕсли;

// Формируем объект Дата
Результат = Дата(Год, Месяц, День, Час, Минута, Секунда);

Почему это важно?

Корректная обработка AM/PM — это критический узел алгоритма. Многие новички допускают ошибку, просто прибавляя 12 к PM, забывая о том, что 12 часов дня не требуют прибавления, а 12 часов ночи должны стать нулем. Данный код учитывает эти нюансы.

Гибкость вывода. После того как вы получили объект Дата, вы можете легко представить его в любом нужном вам виде, используя метод Формат(). Например, чтобы вывести дату в привычном российском формате ДД.ММ.ГГГГ ЧЧ:ММ:СС, используйте команду:

СтрокаДляПользователя = Формат(Результат, "ДФ='dd.MM.yyyy HH:mm:ss'");

Рекомендации по реализации

При написании функции в реальном проекте учтите следующие моменты:

Следуя этим шагам, вы сможете легко и безошибочно обрабатывать любые строковые представления даты, поступающие извне, превращая их в полноценные объекты Дата для дальнейшей работы в 1С.

← На главную