Часто при обмене данными с внешними системами, API или при импорте файлов мы сталкиваемся с форматами даты, которые не соответствуют стандартным ожиданиям платформы 1С. Одним из таких «сложных» форматов является американский стандарт: ММ/ДД/ГГГГ ЧЧ:ММ:СС AM/PM. Прямое использование конструктора Дата() для такой строки приведет к ошибке преобразования, так как 1С ожидает канонический формат или локальные настройки системы.
Давайте разберем, как правильно и надежно решить эту задачу, написав собственную функцию парсинга.
Для того чтобы преобразовать строку вида 4/19/2022 10:56:27 PM в объект Дата, нам нужно выполнить следующие действия:
Дата().Рассмотрим детальный пример кода, который позволяет выполнить эту операцию. Мы будем использовать стандартные методы работы со строками, такие как СтрРазделить().
Пример = "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'");
При написании функции в реальном проекте учтите следующие моменты:
Строки[0].СтрЗаменить().Библиотека стандартных подсистем, полезно изучить модуль СтроковыеФункцииКлиентСервер. Хотя готового метода для американского формата там может не быть, он содержит отличные примеры обработки строк, которые помогут сделать ваш код более профессиональным.Следуя этим шагам, вы сможете легко и безошибочно обрабатывать любые строковые представления даты, поступающие извне, превращая их в полноценные объекты Дата для дальнейшей работы в 1С.