Hello
@westerdaled,
The difference is expected because the Canvas App and Power Automate don't necessarily present the Dataverse CreatedOn value in the same way.
Dataverse stores the CreatedOn value in UTC. The Canvas App can apply the user's configured timezone when displaying the value, whereas the Get a row by ID action generally returns the Dataverse value in UTC, which is why you are seeing the Z at the end of the timestamp.
I wouldn't recommend hard-coding 'GMT Standard Time' if the flow is going to be used by people in different time zones. That would make the result correct only for that particular timezone.
Instead, if the requirement is to show the date/time according to the current user, you need to determine the user's timezone and then use that timezone in convertTimeZone(). You don't necessarily need to maintain your own timezone table; Power Automate uses Windows time zone IDs, which already account for daylight-saving changes.
For example, the general pattern would be:
formatDateTime(
convertTimeZone(
outputs('Get_a_row_by_ID')?['body/createdon'],
'UTC',
<user's Windows time zone ID>
),
'dd/MM/yyyy HH:mm'
)
The important part is how the flow identifies the user. If this is a user-facing flow triggered from a Canvas App, I'd consider passing the user's timezone (or timezone ID) from the app to the flow rather than relying on the connection/account running the Dataverse action.
That way the same flow can return the correct local time for each user instead of having a fixed timezone embedded in the flow.
Also, the one-hour difference you're seeing is a good indication that daylight-saving/timezone conversion is involved rather than the Dataverse record itself having a different CreatedOn value. The Z value in your JSON is UTC.