Power Automateで日本時間の現在時刻を得る方法
PowerAutomateで日本時間を得る方法
概要
PowerAutomateで日時を扱うと9時間ずれるのはPowerAutomateは日時を協定世界時で扱うからなので、日時を日本標準時に変換する必要がある。
変換するために9時間単純に足すよりも ConvertFromUtc(世界標準時の日時,'Tokyo Standard Time')
した方がいいですよ。という話
本文
こん○○は。私は最近はすっかりMicrosoft製品に囲まれて過ごしていますが、皆さんはいかがお過ごしでしょうか。
つい先日、毎月経理に出さないといけない各種請求書の支払い依頼書を出し忘れてしまい、出し忘れない為の仕組みを用意しようと思いました。 月内の17日迄には全部の請求書が揃うので、毎月17日を過ぎて比較的業務が詰まってない水曜日の朝にTeamsに「にょもこ!請求書をだすのだよ」というメッセージを送ったら流石に提出し忘れないだろうと思い、その様な仕組みをPowerAutomateで用意しようと思ったのです。
トリガーに毎週水曜日の朝8時を指定して→今日の日付を変数に入れて→日が17以上23以下ならTeamsに通知する
この流れでいける!と思い、まずは今日の日付を得よう…と思ったのですが、PowerAutomateは日時を基本的にUTC(協定世界時)で扱うので9時間ずれるんですよね。朝8時に通知を出そうと思うと日付が一日ずれます。
日時のアクションでやる方法はわかって居るのですが、最近PowerAutomateの関数の使い方を覚えたので関数でやりたい…現在時刻は utcNow()
で取れるのはわかってるがタイムゾーンの変換方法がわからない…
日本時間を扱うのなんてググってコピペで行けるだろう…と思ったらググり方が悪いのか、得た日時に9時間足します!という記事ばかり…
いや、9時間ずれているのでそうする気持ちはわかるのですが、UTCを9時間進めるのはダメでしょ…と思ったので自分のコピペ用に書いておきます。
タイムゾーンを指定する
ググってダメなら公式ドキュメント。Azure Logic AppsとPower Automateで関数マニュアル共通なんですね知らなかった。
convertFromUtc('<timestamp>', '<destinationTimeZone>', '<format>'?)
timestampには何か日時を表すもの、destinationTimeZoneには変換したいタイムゾーン、formatには日時を得たい形式を入れますformatの後ろに?が付いてるのでformatは省略可能です。
変換したいタイムゾーンはMicrosoft Windows の既定のタイム ゾーン に関するページを参照してくださいって書いてありますが、このページを日本語で見てたら設定するTimezoneにたどり着けません。私は最初JPを指定して失敗しました。orz
英語で読むにしてからTimezoneって書いてある部分で適切な物を選びます。日本なら Tokyo Standard Time
ですね。
日本時間の現在の日時を得る
UTCの現在の日時を得るのが utcNow()
なので convertFromUtc(variables('NowDateTime'),'Tokyo Standard Time')
すれば日本時間の現在の日時を得る事が出来ます。
Formatが未指定なので yyyy-MM-ddTHH:mm:ss.fffffffK
という形式になります。何か普通に日時を得たいんだけど…と言う事ならFormatに MM/dd HH:mm
とか指定すれば 月/日 時:分
という形式の値を得ることができます。
今回私がやりたい事に必要な物は日付だけだったのでconvertFromUtc(variables('NowDateTime'),'Tokyo Standard Time','dd')
として、更に比較で利用したかったのでint(convertFromUtc(variables('NowDateTime'),'Tokyo Standard Time','dd'))
として種類を整数にしました。
おしまい