Power AutomateでUTC時間を日本時間に関数をつかって変換したい


Power Automateでは、「utcNow()」という関数をつかって、現在の日時を取得することができます。ファイル名に使ったり、Excelにデータを書き出す際のタイムスタンプとしてつかったりと欠かせない関数です。
ただ、この関数で取得できるのはいわゆる日本時間ではありません。
UTC 協定世界時 UTC+0000 と JST 日本標準時 UTC+0900 は9時間の差があります。
方法1:タイムゾーンの変換をつかう
Power Automateには、ちゃんとタイムゾーンの変換ができる組み込みコネクタが用意されています。以下図のように使います。

ただ、書式設定文字列をこのパターンにしても、なぜか月、日、年の順番になってしまうんですよね。

書式設定文字列には、カスタム項目の設定に手入力で「yyyy/MM/dd」と入れると良いでしょう。


方法2 addHours関数をつかう

formatDateTime(addHours(utcNow(),9),'yyyy/MM/dd HH:mm')
UTC協定世界時と日本標準時は9時間の差があるので、addHours関数で9時間を加算し、formatDateTime関数で日付と時刻の表現をyyyy/MM/dd HH:mm の形に整えています。
ちなみに、上記ではformatDateTime関数を使っていますが、addHours関数自身にも2つ目の引数に形式を指定できるので、以下でもOKです。

addHours(utcNow(),9,'yyyy/MM/dd HH:mm')
方法3 convertTimeZone関数を使う

convertTimeZone(utcNow(), 'UTC', 'Tokyo Standard Time','yyyy/MM/dd hh:mm')
convertTimeZone関数をつかうという方法を使えば、タイムゾーンの変換コネクタと同じ方法で時間帯を変換することができます。コネクタを使う場合に比べて、一行減らすことができるのが少しうれしいところです。
第3引数で形式を整えていますが、省くと以下のようにUTC時を表していた最後の「Z」が除かれました。

タイムゾーン名がちょっと覚えにくいですが、個人的にはconvertTimeZoneがおすすめです。辞書登録しちゃうのもアリでは?
convertFromUtc関数をつかう
上のconvertTimeZoneと似ていますが、utcからの変更とわかっているのであれば、こちらを使うほうが引数が若干少なくて済みます。
convertFromUtc(utcNow(),'Tokyo Standard Time','yyyy-MM-dd hh:mm')


日付だけ使って前日を取得するなら日ズレに注意
前日日付を取得したいケースはよくあると思います。前日を取得するには「addDays関数」が使えます。ぱっとこういうのを思い浮かべます。

addDays(utcNow(),-1,'yyyy/MM/dd HH:mm')

現在時刻がわかるようにスクリーンショットを撮ってみました。何かお気づきですか?
確かに値は前日なのですが、このフローを午前9時より前に実行すると、取得できる値は2022/3/10 となってしまいます。
こんな場合には先ほどのcomvertTimeZone関数を使うとうまくいきます。

addDays(convertTimeZone(utcNow(), 'UTC', 'Tokyo Standard Time'),-1,'yyyy/MM/dd HH:mm')

ちゃんと日本時間で前日の同時刻が取得できました。あとは形式の部分から時刻を除き、’yyyy/MM/dd’ だけにしてあげれば前日の日付が取れますね。
そもそも協定世界時って?
Wikipediaによれば以下のようなものです。
スクリーンショットの「値」の部分で「2022-03-12T01:18:17.3405938Z」という形式で時間が表現されています。TとかZとか入っている部分は、ISO-8601 という国際規格による日時表現のようです。
他にもちょっとしたPower Automateの小技を集めて書き溜めていますのでこちらからご覧ください。
ディスカッション
コメント一覧
まだ、コメントがありません