M365Con 2027 – bezpłatna konferencja online · 11–22 Jan 2027 · 120 sessions→ m365con.net

Blog · Mirko Peters

formatDateTime w Power Automate: składnia, ciągi formatów i przykłady

By ·

Wyjaśniamy działanie formatDateTime w Power Automate: składnię, najważniejsze ciągi formatów, strefy czasowe z convertTimeZone oraz błędy, które prowadzą do złych dat i godzin.

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

Funkcja formatDateTime w Power Automate zamienia datę i godzinę na tekst w wybranym przez Ciebie formacie. Składnia to formatDateTime(timestamp, format, locale), gdzie format i locale są opcjonalne, a wynikiem jest ciąg znaków. Na przykład formatDateTime(utcNow(), 'dd-MM-yyyy') zwraca bieżącą datę UTC jako dzień, miesiąc i rok. Artykuł jest przeznaczony dla osób budujących przepływy, które wciąż trafiają na wartości w rodzaju 2023-10-22T00:00:00Z w wiadomościach e-mail, nazwach plików lub kolumnach SharePoint. Omawiamy składnię, najczęściej używane ciągi formatów, pułapkę stref czasowych, tabelę typowych wzorców oraz błędy prowadzące do nieprawidłowych wyników.

Najważniejsze wnioski

  • Składnia to formatDateTime(timestamp, format, locale), gdzie format i locale są opcjonalne, a wynikiem zawsze jest ciąg znaków.
  • Bez formatu funkcja zwraca wzorzec ISO 8601 round-trip, na przykład 2018-03-15T00:00:00.0000000.
  • Wielkość liter ma znaczenie w ciągach formatów: MM to miesiąc, a mm to minuta; HH oznacza godzinę 24-godzinną, a hh godzinę 12-godzinną.
  • Power Automate domyślnie działa w UTC, dlatego najpierw przelicz strefę czasową za pomocą convertTimeZone lub convertFromUtc, a dopiero potem sformatuj wynik.
  • Wartości wpisane ręcznie i ciągi formatów ujmuj w apostrofy, ale nigdy nie ujmuj w apostrofy zawartości dynamicznej.

Jak działa formatDateTime

Funkcja przyjmuje znacznik czasu i go przekształca. Artykuł Microsoft o formatowaniu wartości daty i godziny w przepływie opisuje pierwszy argument jako datę i godzinę, które chcesz sformatować. Może być wpisany ręcznie lub pochodzić z zawartości dynamicznej. Wpisane wartości powinny mieć postać ISO 8601, na przykład 2009-06-15T13:45:30. Drugi argument to ciąg formatu. Pojedynczy znak oznacza standardowy ciąg formatu. Więcej znaków tworzy niestandardowy ciąg formatu, który kontroluje położenie i precyzję miesiąca, dnia, roku, godziny, sekundy i tak dalej.

Trzy szczegóły z dokumentacji wyrażeń przepływu Microsoft warto zapamiętać:

  • Format jest opcjonalny. Jeśli go pominiesz, domyślnie używany jest wzorzec o, który Microsoft opisuje jako ISO 8601 z zachowaniem informacji o strefie czasowej. formatDateTime('03/15/2018') zwraca '2018-03-15T00:00:00.0000000'.
  • Nieprawidłowy format powoduje błąd. Uruchomienie przepływu kończy się niepowodzeniem, więc literówka we wzorcu pojawi się w historii uruchomień.
  • Ustawienie regionalne (locale) jest opcjonalne. Jeśli go pominiesz, przyjmowane jest en-us. Nieprawidłowe locale również powoduje błąd. Tak uzyskasz nazwy miesięcy i dni w innym języku: formatDateTime('01/31/2016', 'dddd MMMM d', 'fr-fr') zwraca 'dimanche janvier 31', natomiast to samo wywołanie bez locale zwraca 'Sunday January 31'.

Wartość zwracana jest ciągiem znaków, i to ma znaczenie w praktyce. Po sformatowaniu daty otrzymujesz tekst, więc nie należy używać tego wyniku do obliczeń na datach. Najpierw wykonaj obliczenie za pomocą funkcji takich jak addDays lub addToTime, a formatowanie zrób na samym końcu. W Power Automate sformatowana wartość to zwykle to, co wstawiasz do treści wiadomości e-mail, nazwy pliku lub kolumny tekstowej.

Jak krok po kroku użyć formatDateTime w Power Automate

Artykuł Microsoftu przedstawia jasny sposób wstawiania wyrażenia do przepływu.

  1. Wybierz pole wejściowe akcji, w którym ma się znaleźć sformatowana wartość, na przykład Treść akcji Wyślij wiadomość e-mail (V2).
  2. Wybierz Dodaj zawartość dynamiczną, a następnie otwórz kartę Wyrażenie. W projektancie przepływów ta opcja widoczna jest jako przycisk fx.
  3. Wpisz formatDateTime( lub znajdź tę funkcję na liście funkcji Data i godzina.
  4. Dodaj wartość. Wpisz stałą wartość w apostrofach albo wybierz zawartość dynamiczną. Nie stawiaj apostrofów wokół zawartości dynamicznej.
  5. Dodaj ciąg formatujący w apostrofach, na przykład 'MM/dd/yyyy'.
  6. Wybierz OK, aby wstawić wyrażenie.

Wzorzec ze strony Microsoftu wygląda tak: formatDateTime('2023-10-22', 'dd/MM/yyyy hh:mm tt') dla stałej wartości w cudzysłowie. Ta sama funkcja z elementem zawartości dynamicznej w miejsce wartości w apostrofach wygląda tak samo, ale bez apostrofów.

Przykład z artykułu korzysta z przepływu uruchamianego ręcznie, z danymi wejściowymi Data. Wyrażenie to formatDateTime(triggerBody()?['date'], 'MM/dd/yyyy'). Dla daty 2023-10-22 wiadomość e-mail pokazuje datę w postaci MM/dd/yyyy.

Zanim zbudujesz coś na tym wyrażeniu, sprawdź je, używając akcji Utwórz ze stałym znacznikiem czasu w apostrofach. Uruchom przepływ i odczytaj wynik w historii uruchomień. Zajmuje to minutę i pozwala uniknąć naprawiania błędnego formatu w przepływie, który już wysyła prawdziwe wiadomości e-mail.

Ciągi formatujące, których naprawdę będziesz używać

Standardowe ciągi to pojedyncze litery. Przykłady Microsoftu dla znacznika czasu 2009-06-15T13:45:30:

  • 'g' zwraca 6/15/2009 1:45 PM, czyli ogólny wzorzec daty i godziny z krótkim czasem.
  • 'D' zwraca Monday, June 15, 2009, czyli wzorzec długiej daty.

Dokumentacja .NET wymienia więcej standardowych liter. Przykłady dla tego samego znacznika czasu: 'd' daje 6/15/2009, 't' daje 1:45 PM, 'T' daje 1:45:30 PM, 's' daje sortowalne 2009-06-15T13:45:30, a 'Y' daje June 2009. Większość z nich zależy od reguł kultury, więc ta sama litera może wyglądać inaczej przy innym ustawieniu regionalnym. Te, które wyglądają tak samo wszędzie, to o, r, s i u.

Ciągi niestandardowe dają pełną kontrolę. Oto specyfikatory istotne dla przepływów:

  • yyyy to czterocyfrowy rok, a yy to dwucyfrowy rok.
  • MM to miesiąc z zerem wiodącym, MMM to skrócona nazwa miesiąca, a MMMM to pełna nazwa miesiąca. M to miesiąc bez zera wiodącego.
  • dd to dzień z zerem wiodącym, ddd to skrócona nazwa dnia, a dddd to pełna nazwa dnia.
  • HH to godzina w formacie 24-godzinnym, z zerem wiodącym. hh to godzina w formacie 12-godzinnym, z zerem wiodącym.
  • mm to minuta, ss to sekunda, a fff to milisekundy.
  • tt to AM lub PM.

Zgodnie z tą tabelą formatDateTime('2009-06-15T13:45:30', 'yyyy-MM-dd') daje 2009-06-15, a 'hh:mm tt' daje 01:45 PM. Artykuł Microsoftu o przepływach pokazuje też formatDateTime(utcNow(), 'MMMM dd, yyyy, HH:mm'), które zwraca bieżącą datę i godzinę UTC w postaci June 15, 2009, 16:50, używając stałej przykładowej daty.

Dwie osobliwości wynikają z reguł .NET. Po pierwsze, pojedyncza litera jest zawsze traktowana jako standardowy ciąg formatu. Jeśli chcesz użyć pojedynczego specyfikatora niestandardowego, poprzedź go znakiem procenta, na przykład '%d'. Po drugie, aby wstawić stały tekst do wzorca, zapisz znak z ukośnikiem wstecznym albo umieść tekst w cudzysłowie. Pozostałe znaki, które nie są specyfikatorami, są kopiowane do wyniku bez zmian. Ukośnik i dwukropek zostaną zastąpione separatorami z ustawień regionalnych, co może zaskoczyć, gdy podasz inne ustawienia regionalne.

Strefy czasowe: formatuj po konwersji

Power Automate domyślnie używa czasu UTC, a utcNow() zwraca bieżącą datę i godzinę w UTC. Jeśli Twoi użytkownicy znajdują się w Berlinie lub w Nowym Jorku, godzina w wiadomości e-mail będzie nieprawidłowa, dopóki najpierw jej nie przeliczysz.

W artykule Microsoft obie funkcje są połączone: formatDateTime(convertTimeZone(utcNow(), 'UTC', 'Eastern Standard Time'), 'yyyy-MM-dd HH:mm:ss'). Funkcja wewnętrzna zmienia strefę czasową, a zewnętrzna formatuje wynik. Nazwy stref czasowych to nazwy systemu Windows, na przykład UTC, Pacific Standard Time i Eastern Standard Time. Dla innych regionów użyj odpowiedniej nazwy strefy czasowej systemu Windows z listy Microsoft.

Dokumentacja języka wyrażeń przepływów opisuje także convertFromUtc, która przyjmuje znacznik czasu UTC i docelową strefę czasową, a zwraca przeliczony czas bez przesunięcia UTC. Jej przykład: convertFromUtc('2018-01-01T08:00:00.0000000Z', 'Pacific Standard Time') zwraca "2018-01-01T00:00:00.0000000". Istnieje też convertToUtc, która działa w odwrotnym kierunku. Power Automate ma również akcję Konwertuj strefę czasową z danymi wejściowymi Czas bazowy, Strefa czasowa źródła, Strefa czasowa docelowa oraz opcjonalnym Ciągiem formatu, jeśli wolisz akcję zamiast wyrażenia.

Jeśli dane wejściowe nie są poprawnym formatem ISO 8601, spodziewaj się błędu w rodzaju „The date time string must match ISO8601 format.”. Typowa przyczyna to data wpisana jako 15/03/2018. W przypadku dat w lokalnym formacie dokumentacja opisuje parseDateTime z ustawieniami regionalnymi i formatem, na przykład parseDateTime('21052019', 'fr-fr', 'ddMMyyyy'), która zwraca '2019-05-21T00:00:00.0000000'. Najpierw sparsuj, potem formatuj.

Częste błędy

  • Użycie mm dla miesiąca. Małe mm oznacza minuty, a MM oznacza miesiąc. Data sformatowana jako dd/mm/yyyy pokaże minuty w miejscu, w którym powinien być miesiąc.
  • Łączenie HH z tt. Przykład Microsoftu 'M/dd/yyyy HH:mm:ss tt' generuje 6/15/2009 13:45:30 PM, co jest sprzeczne. Użyj hh z tt albo HH bez niego.
  • Cytowanie dynamicznej zawartości. Dynamiczna zawartość nie może zawierać pojedynczych cudzysłowów, inaczej przepływ potraktuje nazwę jak zwykły tekst.
  • Pominięcie strefy czasowej. Domyślnie obowiązuje UTC. Przelicz przed formatowaniem.
  • Obliczenia na wyniku. Wynik jest ciągiem znaków. Najpierw oblicz, na końcu formatuj.
  • Ufanie przykładowym wynikom utcNow(). Daty w dokumentacji są stałymi przykładami. Twój wynik odzwierciedla bieżący czas.
  • Przekazywanie daty niezgodnej z ISO. Najpierw sparsuj ją, podając ustawienia regionalne i format.

Powiązane tematy do zgłębienia

  • Konwersja stref czasowych: artykuł Microsoft o konwertowaniu stref czasowych omawia zarówno akcję, jak i wyrażenie.
  • Dodawanie i odejmowanie czasu: addDays i addToTime przyjmują ten sam opcjonalny format, dzięki czemu możesz przesunąć i sformatować datę w jednym wywołaniu.
  • Parsowanie lokalnych formatów dat: parseDateTime przyjmuje ustawienia regionalne i format dla dat, które nie są zapisane w formacie ISO 8601.
  • Pełna lista funkcji: dokumentacja wyrażeń przepływu pracy opisuje każdą funkcję daty i czasu.
  • Wszystkie niestandardowe specyfikatory: strona niestandardowe ciągi formatu daty i godziny zawiera listę każdej litery.

Następny krok

Aby uzyskać niezawodne wyniki funkcji formatDateTime w usłudze Power Automate, zacznij od daty w formacie ISO 8601, przekonwertuj strefę czasową przed formatowaniem i przetestuj wzorzec w akcji Compose. Następnie przeczytaj artykuł Microsoft o tym, jak dostosować lub sformatować wartości daty i godziny w przepływie, i zachowaj krótką listę wzorców, których Twój zespół używa najczęściej.

Entities in this article

Power Automate

Related articles

RSS