M365Con 2027 – бесплатная онлайн-конференция · 11–22 Jan 2027 · 120 sessions→ m365con.net

Блог · Mirko Peters

Power Automate formatDateTime: синтаксис, строки формата и примеры

By ·

Разбираем formatDateTime в Power Automate: синтаксис, строки формата, которые действительно важны, часовые пояса с convertTimeZone и ошибки, из-за которых выводятся неверные дата и время.

Automatically translated with AI from the original post. Read the English original

Power Automate formatDateTime превращает дату и время в текст нужного вам вида. Синтаксис: formatDateTime(timestamp, format, locale), где формат и локаль необязательны, а результатом является строка. Например, formatDateTime(utcNow(), 'dd-MM-yyyy') возвращает текущую дату UTC в виде дня, месяца и года. Статья адресована тем, кто создаёт потоки и постоянно получает такие значения, как 2023-10-22T00:00:00Z, в письмах, именах файлов или столбцах SharePoint. Здесь рассмотрены синтаксис, строки формата, которые вы будете использовать чаще всего, ловушка с часовыми поясами, таблица распространённых шаблонов и ошибки, из-за которых результаты неверны.

Ключевые выводы

  • Синтаксис: formatDateTime(timestamp, format, locale), где формат и локаль необязательны, а результат всегда является строкой.
  • Без формата функция возвращает шаблон ISO 8601 round-trip, например 2018-03-15T00:00:00.0000000.
  • Регистр в строках формата важен: MM — это месяц, а mm — минуты; HH — это 24-часовой формат часов, а hh — 12-часовой.
  • Power Automate по умолчанию работает во времени UTC, поэтому сначала преобразуйте часовой пояс с помощью convertTimeZone или convertFromUtc, а затем форматируйте результат.
  • Заключайте в одинарные кавычки литеральные значения и строки формата, но никогда не заключайте в них динамическое содержимое.

Как работает formatDateTime

Функция принимает метку времени и преобразует её по заданному формату. В статье Microsoft о форматировании значений даты и времени в потоке первый аргумент описан как дата и время, которые нужно отформатировать. Его можно ввести вручную или получить из динамического содержимого. Введённые вручную значения должны быть в формате ISO 8601, например 2009-06-15T13:45:30. Второй аргумент — строка формата. Один символ — это стандартная строка формата. Больше одного символа — пользовательская строка формата, которая управляет положением и точностью месяца, дня, года, часа, секунды и так далее.

Стоит запомнить три детали из справочника по выражениям рабочих процессов Microsoft:

  • Формат необязателен. Если его не указать, по умолчанию используется шаблон o, который Microsoft описывает как ISO 8601 с сохранением информации о часовом поясе. formatDateTime('03/15/2018') возвращает '2018-03-15T00:00:00.0000000'.
  • Недопустимый формат вызывает ошибку. Выполнение потока завершается с ошибкой, поэтому опечатка в шаблоне появится в журнале запусков.
  • Локаль необязательна. Если её не указать, используется en-us. Недопустимая локаль также приводит к ошибке. Так можно получить названия месяцев и дней на другом языке: formatDateTime('01/31/2016', 'dddd MMMM d', 'fr-fr') возвращает 'dimanche janvier 31', тогда как тот же вызов без локали возвращает 'Sunday January 31'.

Возвращаемое значение — строка, и на практике это важно. Как только вы отформатировали дату, у вас уже текст, и результат нельзя использовать для вычислений с датами. Сначала выполните расчёт с помощью функций, например addDays или addToTime, а форматируйте в самом конце. В Power Automate отформатированное значение обычно подставляют в текст письма, имя файла или текстовый столбец.

Как использовать formatDateTime в Power Automate пошагово

В статье Microsoft есть понятный способ вставить выражение в поток.

  1. Выберите поле ввода в действии, куда нужно поместить отформатированное значение, например Текст действия Отправка сообщения электронной почты (V2).
  2. Выберите Добавить динамическое содержимое, затем откройте вкладку Выражение. В конструкторе потоков она отображается как кнопка fx.
  3. Введите formatDateTime( или найдите функцию в списке функций Дата и время.
  4. Добавьте значение. Введите фиксированное значение в одинарных кавычках или выберите динамическое содержимое. Не ставьте одинарные кавычки вокруг динамического содержимого.
  5. Добавьте строку формата в одинарных кавычках, например 'MM/dd/yyyy'.
  6. Выберите ОК, чтобы вставить выражение.

Шаблон со страницы Microsoft выглядит так: formatDateTime('2023-10-22', 'dd/MM/yyyy hh:mm tt') для фиксированного значения в кавычках. Тот же вызов с элементом динамического содержимого вместо значения в кавычках пишется без кавычек.

В примере из статьи используется поток, который запускается вручную, с входным полем Date. Выражение: formatDateTime(triggerBody()?['date'], 'MM/dd/yyyy'). При дате 2023-10-22 в письме дата отображается в формате MM/dd/yyyy.

Чтобы проверить выражение перед тем, как строить на нём логику, добавьте действие Compose с фиксированной меткой времени в одинарных кавычках, запустите поток и посмотрите результат в истории запусков. Это займёт минуту и избавит вас от исправления неверного формата в потоке, который уже отправляет реальные письма.

Строки формата, которые вам действительно пригодятся

Стандартные строки состоят из одной буквы. Примеры Microsoft для метки времени 2009-06-15T13:45:30:

  • 'g' возвращает 6/15/2009 1:45 PM, общий шаблон даты и времени с коротким временем.
  • 'D' возвращает Monday, June 15, 2009, длинный шаблон даты.

В документации .NET перечислено больше стандартных букв. Примеры для той же метки времени: 'd' даёт 6/15/2009, 't' даёт 1:45 PM, 'T' даёт 1:45:30 PM, 's' даёт сортируемый 2009-06-15T13:45:30, а 'Y' даёт June 2009. Большинство из них зависят от правил региональных параметров, поэтому одна и та же буква может выглядеть иначе при другой локали. Одинаково выглядят везде только o, r, s и u.

Пользовательские строки дают полный контроль над форматом. Ниже спецификаторы, которые важны для потоков:

  • yyyy — четырёхзначный год, yy — двузначный год.
  • MM — месяц с ведущим нулём, MMM — сокращённое название месяца, MMMM — полное название месяца. M — месяц без ведущего нуля.
  • dd — день с ведущим нулём, ddd — сокращённое название дня недели, dddd — полное название дня недели.
  • HH — час в 24-часовом формате с ведущим нулём. hh — час в 12-часовом формате с ведущим нулём.
  • mm — минуты, ss — секунды, fff — миллисекунды.
  • tt — AM или PM.

По этой таблице formatDateTime('2009-06-15T13:45:30', 'yyyy-MM-dd') даёт 2009-06-15, а 'hh:mm tt' даёт 01:45 PM. В статье Microsoft о потоках также приведён пример formatDateTime(utcNow(), 'MMMM dd, yyyy, HH:mm'), который возвращает текущие дату и время в UTC в формате June 15, 2009, 16:50, при этом используется фиксированная примерная дата.

Два нюанса связаны с правилами .NET. Во-первых, одна буква всегда читается как стандартная строка формата. Если нужен одиночный пользовательский спецификатор, поставьте перед ним знак процента, например '%d'. Во-вторых, чтобы вставить фиксированный текст в шаблон, экранируйте символ обратной косой чертой или заключите текст в кавычки. Остальные символы, которые не являются спецификаторами, копируются в результат как есть. Косая черта и двоеточие заменяются разделителями локали, и это может удивить, если вы передаёте другую локаль.

Часовые пояса: форматируйте после преобразования

Power Automate по умолчанию использует UTC, а utcNow() возвращает текущие дату и время в UTC. Если ваши пользователи находятся в Берлине или Нью-Йорке, время в письме будет неверным, пока вы его не преобразуете.

В статье Microsoft эти функции объединены: formatDateTime(convertTimeZone(utcNow(), 'UTC', 'Eastern Standard Time'), 'yyyy-MM-dd HH:mm:ss'). Внутренняя функция меняет часовой пояс, внешняя форматирует результат. Названия часовых поясов – это названия Windows, например UTC, Pacific Standard Time и Eastern Standard Time. Для других регионов используйте соответствующее название часового пояса Windows из списка Microsoft.

В справочнике по рабочим процессам также описана функция convertFromUtc, которая принимает временную метку UTC и целевой часовой пояс и возвращает преобразованное время без смещения UTC. Пример из справки: convertFromUtc('2018-01-01T08:00:00.0000000Z', 'Pacific Standard Time') возвращает "2018-01-01T00:00:00.0000000". Есть и convertToUtc, которая работает в обратном направлении. Кроме того, в Power Automate есть действие Convert time zone с входными параметрами Base time, Source time zone, Destination time zone и необязательным Format string, если вы предпочитаете действие выражению.

Если входное значение не соответствует ISO 8601, ожидайте ошибку вида «The date time string must match ISO8601 format.». Типичная причина – дата, введённая как 15/03/2018. Для дат в локальном формате справочник описывает parseDateTime с локалью и форматом, например parseDateTime('21052019', 'fr-fr', 'ddMMyyyy'), которая возвращает '2019-05-21T00:00:00.0000000'. Сначала разберите дату, затем форматируйте.

Распространённые ошибки

  • Использование mm для месяца. Строчное mm – это минуты, а MM – месяц. Дата, отформатированная как dd/mm/yyyy, покажет минуты там, где должен быть месяц.
  • Сочетание HH с tt. Пример самой Microsoft 'M/dd/yyyy HH:mm:ss tt' даёт 6/15/2009 13:45:30 PM, что противоречиво. Используйте hh вместе с tt или HH без него.
  • Заключение динамического содержимого в кавычки. Динамическое содержимое не должно содержать одинарных кавычек, иначе поток воспринимает имя как обычный текст.
  • Забытый часовой пояс. По умолчанию используется UTC. Выполняйте преобразование до форматирования.
  • Вычисления над результатом. Результат – это строка. Сначала вычисляйте, потом форматируйте.
  • Доверие примерам результатов для utcNow(). Даты в документации – это фиксированные примеры. Ваш результат отражает текущее время.
  • Передача даты не в формате ISO. Сначала разберите её с помощью локали и формата.

Связанные темы для изучения

  • Преобразование часовых поясов: статья Microsoft о преобразовании часовых поясов описывает и действие, и выражение.
  • Добавление и вычитание времени: addDays и addToTime принимают тот же необязательный формат, поэтому можно сдвинуть дату и отформатировать её одним вызовом.
  • Разбор локальных форматов дат: parseDateTime принимает локаль и формат для дат, которые не приходят в формате ISO 8601.
  • Полный список функций: в справочнике выражений рабочих процессов описана каждая функция для работы с датами и временем.
  • Все пользовательские спецификаторы перечислены на странице Пользовательские строки формата даты и времени: там описана каждая буква.

Следующий шаг

Чтобы результаты formatDateTime в Power Automate были предсказуемыми, начните с даты в формате ISO 8601, переведите часовой пояс до форматирования и проверьте шаблон в действии Compose. Затем прочитайте статью Microsoft о том, как настроить или отформатировать значения даты и времени в потоке, и составьте короткий список шаблонов, которые чаще всего использует ваша команда.

Entities in this article

Power Automate

Related articles

RSS