Skip to content
home

Convert UTC to Local Time in Power Automate

Your flow sends an email that says the meeting is at 08:00 when it is really 09:00. Or a SharePoint date shows up as the day before. Nothing is broken: Power Automate works in UTC, and you have to convert to local time yourself. Here is how I do it, and the mistakes I see most often.

Awokunle WinnerUpdated 3 November 2026 4 min read

1. Why your times are wrong

utcNow(), the trigger time, and every date that comes back from SharePoint, Dataverse or Outlook through Power Automate is in UTC. You can spot it by the Z at the end, as in 2026-11-03T08:00:00Z.

If your users are not in UTC, any time you put into an email, a Teams message or a document will look wrong until you convert it.

2. Use convertFromUtc

convertFromUtc takes a UTC time, a time zone name and an optional format. Put it in a Compose action or straight into your email body as an expression:

convertFromUtc(utcNow(), 'W. Central Africa Standard Time', 'dd/MM/yyyy HH:mm')

For a SharePoint date column, pass the column value instead of utcNow():

convertFromUtc(triggerBody()?['DueDate'], 'GMT Standard Time', 'dddd d MMMM yyyy')

If you leave out the format, you get the full ISO timestamp back, which is fine for storing but not for reading.

3. Find the right time zone name

The time zone must be the Windows time zone name, not a city or an abbreviation like WAT or EST. A few common ones:

  • Nigeria and West Central Africa: W. Central Africa Standard Time
  • UK and Ireland: GMT Standard Time (this one includes British Summer Time)
  • South Africa: South Africa Standard Time
  • US East Coast: Eastern Standard Time
  • India: India Standard Time
  • Sydney: AUS Eastern Standard Time

If you are not sure of the name, add the Convert time zone action from the Date Time connector and open its Destination time zone dropdown. It lists every valid zone.

4. Format the result properly

The format string follows .NET date formats, and the letters are case sensitive. This catches people all the time:

  • MM is the month, mm is minutes.
  • HH is the 24-hour clock, hh is the 12-hour clock (add tt for AM or PM).
  • dd is the day number, ddd is the short day name, dddd is the full day name.

If you already have a local time and only need to change how it looks, use formatDateTime. The third value sets the language for day and month names:

formatDateTime(outputs('Local_time'), 'dddd d MMMM yyyy', 'en-GB')

5. SharePoint date-only column shows the day before

A date-only column in SharePoint stores midnight in the site's time zone. Power Automate gets that as UTC, so for a site set to Lagos time, 3 November becomes 2026-11-02T23:00:00Z. Format that directly and you print 2 November.

Convert it to the site's time zone first, then format it:

convertFromUtc(triggerBody()?['StartDate'], 'W. Central Africa Standard Time', 'dd/MM/yyyy')

Use the time zone set on the SharePoint site, found under Site settings, Regional settings. If the site and your users are in different zones, the site's zone is the one that matters here.

6. No-code option: the Convert time zone action

If you prefer not to write expressions, add the Convert time zone action from the Date Time connector. Set Base time to your date, Source time zone to (UTC) Coordinated Universal Time, Destination time zone to your zone, and pick a Format string. Use its Converted time output in later steps.

It does the same job as convertFromUtc. I use the expression when I need it inside a longer string, and the action when someone else will maintain the flow.

7. Going the other way: local time to UTC

Filters and comparisons need UTC, because that is what SharePoint returns. If a user enters 09:00 local time and you want items after it, convert to UTC first:

convertToUtc('2026-11-03 09:00', 'W. Central Africa Standard Time')

To get today's local date, convert now to local time and keep only the date part:

convertFromUtc(utcNow(), 'W. Central Africa Standard Time', 'yyyy-MM-dd')

8. Scheduled flows run on the right clock

A Recurrence trigger has its own Time zone setting under its advanced options. Set it, and a flow scheduled for 08:00 runs at 08:00 local time. Without it, the schedule is in UTC.

This only changes when the flow runs. Times used inside the flow are still UTC, so you still need convertFromUtc for anything you show to people.

Do not just add hours

Want this done for you?

I build this for clients every week. Book a free 30-minute call and I'll tell you exactly what your team needs.

Awokunle Winner · replies within a day

Tell me what's slowing your team down.

Thirty minutes, no cost, no pitch deck. You'll leave knowing exactly what to build and what it should cost.

Book a free 30-min call