Power Automateでは「時間」の取り扱いには注意!
▼過去記事で「Outlookで取得した時間を日本時間に修正する方法」についてご紹介しました。
こちらの記事では、Power AutomateからOutlookの時間を取得すると実際の時間よりズレてしまうとお伝えしました。Power AutomateではOutlook以外でも時間がズレてしまうケースが多いです。この記事ではどのようなケースで時間がズレてしまうのか、時間の変換方法について検証していきます!
Power Automateでは、フローで取得した時間がマイナス9時間ズレるんでしたね。
そもそも何故、時間がズレてしまうのか。
Power Automateは、日時設定が UTC(世界標準時) となっています。世界標準時では日本時間はUTC+9時間を表現します。9時間進んでいるということです。この時差があるのでPower Automate が日本時間を取得するときに勝手に-9時間してUTC時刻に変換してしまうのです。
このため わたしたち日本人は、もう一度+9時間して日本時間に戻す必要がある、ということが必要です。
Power Automateでは、どのケースで時間のズレが発生するのか?
Power Automateでは、どのケースで時間のズレが発生するのかを下記のアクションで検証してみました。
- Outlook「予定の取得」アクション
- Teams「メッセージの取得」アクション
- 日時「現在時刻の取得」アクション
- Excel「行の取得」アクション
Outlook「予定の取得」アクションの検証
Outlook下記の記事でも紹介しましたが、結果として時間はズレました。
Teams「メッセージの取得」アクションの検証
▼Teamsで、図の「2021年08月12日03:23」のメッセージを取得します。
▼結果、「2021年08月11日18:23」となっています。ズレました。
{
"id": "***************",
"etag": "***************",
"messageType": "message",
"createdDateTime": "2021-08-11T18:23:30.638Z",
"lastModifiedDateTime": "2021-08-11T18:23:30.638Z",
"importance": "normal",
"locale": "en-us",
日時「現在時刻の取得」アクションの検証
▼日時コネクタの「現在時刻の取得」を試してみましたが、こちらもマイナス9時間で取得されました。
Excel「行の取得」アクションの検証
▼下図のExcelの5行目のデータをとってみます。
▼取得結果
body": {
"ItemInternalId": "k-0005",
"key": "k-0005",
"name": "仕事B",
"start/dateTime": "44421.3333333333", ←シリアル値になってる・・
"end/dateTime": "44421.6875",
"かかった時間": "0.354166666664241"
}
▼シリアル値になっていて良くわからないので取得データを、同じエクセル内に追記してみます。
下がPAで追記した行です。Excelは時間がズレないようです。
時間の取得の検証結果
▼こんな結果となりました。
- Outlookから取得した時間は、マイナス9時間で取得される。
- Teamsから取得した時間は、マイナス9時間で取得される。
- Power Automateの「現在時刻の取得」アクションで取得した時間は、マイナス9時間で取得される。
- Excelから取得した時間は、ズレない。
各アプリケーションの設定にもよりますので、テスト取得して、変換が必要かどうか確かめたほうが良さそうですね。
時間の確認するためにログを確認する方法
Power Automateで取得した時間を確認するには、フローの実行ログを確認します。Teamsアクションを例にログの確認方法を紹介します。
▼時間を取得したいアクションを追加します。
▼フローを選択して右上の「テスト」をクリックします。
▼「手動」を選択して「テスト」をクリックします。
▼ログを確認したいアクションをクリックして中身を展開し、出力セクションにある「未加工出力の表示」をクリックします。
▼JSON形式のログを確認し、時間を探しましょう。
J
Power Automateで取得した時間
日本時間に変換する方法
▼日本時間に変換する方法は、3つあります。
- Power Automateで取得した時間に「時間への追加」アクションで「9」を足す方法
- Power Automateで取得した時間に関数で「9」を足す方法
- 「タイムゾーンの変換」アクションを使用する方法
Power Automateで取得した時間に「時間への追加」アクションで「9」を足す方法
▼「時間への追加」アクションは日時コネクタの中にあります。
▼「間隔」を9に、「時間単位」を時間にすると9時間プラスされた時間を取得できます。
Power Automateで取得した時間に関数で「9」を足す方法
▼時間に9時間プラスするにはaddHours関数を使うこともできます。
各アクションの「動的なコンテンツ」をクリック→「addHours関数」
第3引数にフォーマット形式を指定すると、同時にフォーマット変換もできるので便利です。
詳細は、addHours関数公式ドキュメントをご覧ください。
「タイムゾーンの変換」アクションを使用する方法
「タイムゾーンの変換」アクションは日時コネクタの中にあります。
こちらも同時にフォーマット変換ができます。
個人的には、まずはフォーマット変換ができる「タイムゾーンの変換」だけ覚えておけばいいかなぁ、と思います。
「タイムゾーンの変換」アクションのフォーマット(書式設定文字列)はどれを選べばいいのか?
▼下記は、Power Automateで取得した時間データをExcelに出力した結果です。
書式設定文字列(フォーマット) | Power Automate からの出力結果 | Excel関数適用 MONTH() | Excel関数適用 DATEVALUE() |
短い形式の時刻パターン – 午後 1:45 [t] | 1900/1/0 9:17 | 1 | #VALUE! |
長い形式の時刻パターン – 午後 1:45:30 [T] | 1900/1/0 9:18 | 1 | #VALUE! |
短い形式の日付パターン – 2009/6/15 [d] | 2021/8/19 0:00 | 8 | #VALUE! |
一般の日時パターン (短い形式の時刻) – 2009/6/15 午後 1:45 [g] | 2021/8/19 9:05 | 8 | #VALUE! |
一般的な日時パターン (長い形式の時刻) – 2009/6/15 午後 1:45:30 [G] | 2021/8/19 9:08 | 8 | #VALUE! |
月日パターン – 6 月 15 日 [m] | 2021/8/19 0:00 | 8 | #VALUE! |
年月パターン – 2009 年 6 月 [y] | 2021/8/1 0:00 | 8 | #VALUE! |
長い形式の日付パターン – 2009 年 6 月 15 日 (月) [D] | Thursday, August 19, 2021 | #VALUE! | #VALUE! |
完全な日時パターン (短い形式の時刻) – 2009 年 6 月 15 日 (月) 午後 | Thursday, August 19, 2021 9:00 AM | #VALUE! | #VALUE! |
完全な日時パターン (長い形式の時刻) – 2009 年 6 月 15 日 (月) 午後 1:45:30 [F] | Thursday, August 19, 2021 9:03:34 AM | #VALUE! | #VALUE! |
ラウンド トリップ日時パターン – 2009-06-15T13:45:30.0000000-07:00 [o] | 2021-08-19T09:11:49.3585360 | #VALUE! | #VALUE! |
RFC1123 パターン – 2009 年 6 月 15 日 (月) 20:45:30 GMT [r] | Thu, 19 Aug 2021 09:14:14 GMT | #VALUE! | #VALUE! |
並べ替え可能な日時パターン – 2009-06-15T13:45:30 [s] | 2021-08-19T09:16:09 | #VALUE! | #VALUE! |
世界共通の並べ替え可能な日時パターン – 2009-06-15 13:45:30Z [u] | 2021-08-19 09:20:18Z | #VALUE! | #VALUE! |
汎用の完全な日時パターン – 2009 年 6 月 15 日 (月) 午後 8:45:30 [U] | Thursday, August 19, 2021 9:21:54 AM | #VALUE! | #VALUE! |
赤文字になっているフォーマットは、Excelの日付系の関数で扱えませんでした。Excelの表示形式の機能を使うこともできません。Excelで日付として認識してくれないようです。
どのフォーマットもDATEVALUE()関数で日付シリアル値は取得できませんでした。
以上の理由からフォーマットを選ぶときは、上の表の青字のフォーマットがおすすめです。
フォーマットをカスタマイズする関数(formatDateTime関数)
フォーマットをカスタマイズするには formatDateTime 関数を使うことによっても可能です。
formatDateTime(’変換する時間’, ‘書式パターン’ )
Power Automateを学ぶ方法
Power Automate学習教材
▲Kindleと紙媒体両方提供されています。デスクトップフロー、クラウドフロー両方の解説がある書籍です。解説の割合としてはデスクトップフロー7割・クラウドフロー3割程度の比率となっています。両者の概要をざっくり理解するのにオススメです。
▲Power Automate for Desktopの基本をしっかり学習するのにオススメです。この本の一番のメリットはデモWebシステム・デモ業務アプリを実際に使ってハンズオン形式で学習できる点です。本と同じシステム・アプリを使って学習できるので、本と自分の環境の違いによる「よく分からないエラー」で無駄に躓いて挫折してしまう可能性が低いです。この点でPower Automate for desktopの一冊目のテキストとしてオススメします。著者は日本屈指のRPAエンジニア集団である『ロボ研』さんです。
▲Power Automate クラウドフローの入門書です。初心者の方には図解も多く一番わかりやすいかと個人的に思っています。
Microsoft 365/ Power Automate / Power Platform / Google Apps Script…
▲Udemyで数少ないPower Automateクラウドフローを主題にした講座です。セール時は90%OFF(1200円~2000円弱)の価格になります。頻繁にセールを実施しているので絶対にセール時に購入してくださいね。満足がいかなければ返金保証制度がありますので安心してご購入いただけます。
まとめ
以上、Power Automateの時間の調整方法についてお伝えしました。参考になれば幸いです。
まとめ
- Power Automateで取得した時間は、マイナス9時間でズレてる可能性があるので要確認。
- 変換方法は、基本は「タイムゾーンの変換」アクションを使い、フォーマットの調整を行うためにはaddHourやformatDatetimeなどの関数を使う。