Как преобразовать дату в формат 12-часового времени AM/PM в 1С?

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

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

Почему не стоит «лепить» строки вручную

Использование методов поиска подстрок и замены их на нужные символы (например, замена :00 на AM или PM) — это трудоемкий путь. Во-первых, это затрудняет поддержку кода. Во-вторых, при изменении региональных настроек системы результат может стать непредсказуемым. Платформа 1С обладает мощным инструментом — функцией Формат(), которая позволяет задавать гибкие шаблоны вывода даты и времени.

Решение через спецификатор формата «вв» (или «tt»)

Для отображения индикатора половины дня (AM/PM) в 1С предусмотрен специальный спецификатор вв (или его аналог tt). Это документированная возможность, которая корректно отрабатывает в современных версиях платформы.

Чтобы получить строку вида «06:47 PM» из стандартного объекта Дата, воспользуемся следующим подходом:

Рассмотрим пример кода:


ДатаДатой = ТекущаяДата();
// Форматируем время в 12-часовом формате с AM/PM
СтрокаВремени = Формат(ДатаДатой, "ДФ='hh:mm tt'");

Здесь мы используем спецификаторы:

  1. hh — часы в 12-часовом формате с ведущим нулем.
  2. mm — минуты.
  3. tt — индикатор половины дня (AM или PM).

Использование параметра локали для стабильного результата

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

Принудительное указание локали en_US позволит унифицировать вывод:


// Принудительное использование американской локали для формата AM/PM
Результат = Формат(ДатаДатой, "Л=en_US; ДФ='hh:mm tt'");

Как исключить секунды из отображения

Частая проблема при использовании встроенных форматов типа ДЛФ=В заключается в автоматическом добавлении секунд, которые не всегда нужны в интерфейсе. Если вам требуется вывести время в формате «часы:минуты AM/PM» (например, «6:26 AM - 9:14 PM»), лучше всего отказаться от ДЛФ в пользу параметра ДФ (ДатаФормат).

Разберем, как собрать такую строку для вывода:


Часть1 = Формат(ДатаНачала, "Л=en_US; ДФ='hh:mm tt'");
Часть2 = Формат(ДатаОкончания, "Л=en_US; ДФ='hh:mm tt'");

ИтоговаяСтрока = Часть1 + " - " + Часть2;

Преимущества профессионального подхода

Используя конструкцию Формат(..., "Л=en_US; ДФ='hh:mm tt'"), мы получаем ряд преимуществ:

Таким образом, для работы с 12-часовым форматом времени всегда отдавайте предпочтение строковым шаблонам ДФ. Это стандарт индустрии разработки на платформе 1С, который позволяет быстро и эффективно реализовывать требования бизнес-задач любой сложности.

← На главную