【Power Automate】日付比較はデータ取得先に寄ってのフォーマットがあるのでformatDateTime()を通しておく

Power Automateを使い始めてから試行錯誤して、自動化したい機能を無事自動化できましたが。
最後まで調整に苦しんだのが、日付データの取り扱いでした。
「エクセルのセルのデータを扱う場合の前準備として、書式設定で設定しておく」ということは以前に書きましたがー。
Share Pointなど、他のデータとの比較をする場合はformatDateTime()を使っておくのが無難だなと。
なぜか日付が正確に比較されない
一通りフローを組んでテストをしてたんですがー。
なぜか、毎回特定の「条件」コントロールでの分岐がうまく動いてくれません。
例えば、AとBが等しいときはCでなければD、という条件だとして、等しいのにDと判断される、という感じでした。
Aにはエクセルのセルに入力していた日付データ。
Bに使用していたのがShare Pointに登録した日付データです。
エクセルに入力されている日付データを使用する場合、Power Automateのエクセル「複数の項目を取得する」のアクションの、「DateTime形式」を「ISO8601」にしておく必要がありますが。
そこは問題なく。

エクセルの書式設定でも問題なく。
「んん?」
となってました。
で、もう一度テストして比較しているデータを確認してみたところ。
エクセルの方は、"yyyy-MM-ddTHH:mm:ssZ"という形で取得しているのに対し。
Share Pointの方は"yyyy-MM-dd"という内容でした。
タイムスタンプの文字列同士の比較なので、"yyyy-MM-dd"部分の比較だけとはならないようです。
Share PointはListsの日付データを入力するカラムの設定で、「日付の時刻の形式」を「日付のみ」にしてましたが、エクセルの方は良く考えれば値をそのまま比較に使用してたので、盲点でした。
なので、形式を揃えることに。
formatDateTime()で形式を揃える
Power Automateで日付の形式を揃えるのに、formatDateTime()という関数を使います。
formatDateTime('タイムスタンプ', '表示形式')
第1引数のタイムスタンプは、日付を入力するのでも、動的コンテンツから参照するのでも、どちらでも大丈夫です。
第1引数に入力された日付データを、指定した表示形式に変換してくれます。
これで、判定が正常に動くところは動きましたがー。
まだ正常に判定されないデータが合ったりで。
原因を探ってみると・・・
タイムゾーンの罠
まさかの、Listsのタイムゾーンが太平洋標準時でした。
これは・・・タイミングによってずれるわけだ・・・
これを日本の設定に変えないと行けないのですがー。
権限の問題なのか、タイムゾーン設定をする箇所が見当たらず。
こちらも関数で対処することにしました。
convertTimeZone('タイムスタンプ', '元のタイムゾーン', '変換するタイムゾーン', '表示形式')
・第1引数でタイムゾーンを変換したい日時を設定
・第2引数で変換したい日時の元のタイムゾーンを入力
・第3引数で変換するタイムゾーンを入力
・第4引数は変換したデータの表示形式を指定できる(省略可能)
という感じです。
第4引数があるので、必要かどうかはなんとも言えませんが。
convertTimeZone()をfomatDateTime()のタイムスタンプにすることもできます。
>>参考:フローで日付と時刻の値をカスタマイズまたは書式設定する – Power Automate
Listsのタイムゾーン設定の変更方法
と、convertTimeZone()を使用してとりあえず正常に動くようにはなりましたが。
元のタイムゾーンを変えた方が楽なので、色々と確認しつつ探索していたら。
ようやく変更できましたw
ListsはShare Pointのサービスの一つなので、Share Point自体の設定を変えるところまでたどり着かなければなりません。
なので、まずはListsの画面の右上にある歯車マークから「リストの設定」を選択して、移ったページでもう一度右上の歯車マークから「サイトの設定」を選択します。

開いたページの中から、「地域の設定」を選択すると。

無事、タイムゾーンを変更できるところにたどり着けます。

これまではなぜか行けなかったのですがー。
自分の予想通り、権限の問題でした。
フローを作っている時にテストの意味合いもあるので。
管理者権限のあるアカウントと、ユーザー権限のアカウントを使いまわしていたため。
Listsを開いていたアカウントがユーザー権限のアカウントで、タイムゾーンが表示されていなかったような気がします。
あれ?と思ったら、アカウントを確認してみるのが良さそうです。
・・・まぁあまりないかもしれませんがw
参考:【PowerApps】SharePointリストのタイムゾーンとの関係について【PowerBI】‐Tableau-id Press
そして一通り
で、また取得するデータ同士で微妙な形式の違いが合っても嫌だなぁと。
エクセルとShare Pointの日付データを比較するものには、formatDateTime()をつけておくことにしました。
入力が手間なのと、どのデータを取得しているのかパット見ではわからなくなりますが。
変数にいれておくのでフローで使い回すのに不便はありません。
いろんな機能を組み合わせることで、より便利になるのがPower Automateなんだなぁ。
ディスカッション
コメント一覧
まだ、コメントがありません