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

PowerAutomateでは、「utcNow()」という関数をつかって、現在の日時を取得することができます。ファイル名に使ったり、エクセルにデータを書き出す際のタイムスタンプとしてつかったりと欠かせない関数です。

ただ、この関数で取得できるのはいわゆる日本時間ではありません。

UTC 協定世界時 UTC+0000 と JST 日本標準時 UTC+0900 は9時間の差があります。

方法1:タイムゾーンの変換をつかう

PowerAutomateには、ちゃんとタイムゾーンの返還ができる組み込みコネクタが用意されています。以下図のように使います。

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

書式設定文字列には、カスタム項目の設定に手入力で「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がおすすめです。辞書登録しちゃうのもアリでは?

日付だけ使って前日を取得するなら日ズレに注意

前日日付を取得したいケースはよくあると思います。前日を取得するには「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によれば以下のようなものです。

協定世界時は国際度量衡局 (BIPM) が国際地球回転・基準系事業 (IERS) の支援を受けて維持する時刻系で、標準周波数報時信号発射の基礎であり、国際単位系 (SI) に基づく国際原子時と同歩度[注釈 3]だが、整数秒だけ異なる。UT1 世界時と近似的に一致させるため、秒を挿入または除去する閏秒調整を行っている[3][4]。UT1 と UTC の差は、国際地球回転・基準系事業のウェブサイト[5]で確認できる[6][7]。世界各地の標準時は協定世界時を基準としている。日本標準時 (JST) は協定世界時より9時間進めた時間である[8][9]

スクリーンショットの「値」の部分で「2022-03-12T01:18:17.3405938Z」という形式で時間が表現されています。TとかZとか入っている部分は、ISO-8601 という国際規格による日時表現のようです。