今回は、Power Apps とデータソースのタイムゾーンについて、です。
検証アプリの概要
文章で説明するのはとても大変なので、簡単なアプリで説明します。
データソース
UTC(協定世界時)の SharePoint Online(以降、SPO)環境と、UTC+9:00(日本時間)のSPO、2つの環境を準備しました。
利用するデータソースは、どちらも上記サイトにカスタムリストを新規追加して、更新日時をビューで表示するようにしただけなので割愛。なお、SPOのリストは新規登録時にも、必ず登録日時で“更新日時”の列もあわせて値が登録されます。
アプリ
Power Apps で前述2つのSPOリストへ接続。
まず、1つ目のScreenにギャラリーを設置して、UTC、日本時間、各々の[タイトル]と[更新日時]を表示するように設定。
続いて、2つ目のScreenを追加し、Formコントロールでタイムゾーン=UTCのリストをNow()関数(システム時間)でListのタイトルへ新規追加するようにします。これで、準備したデータソースのListへタイトルが登録され、あわせて更新時間も設定されるようになりました。
上記の2つ目のScreenを複製して、3つ目のScreenは日本時間のリストを処理するようにすれば完成です。
なお、Power Apps 自体の環境設定は[UTC+9:00(日本時間)]にしてあります。
動作イメージ
#PowerApps SPO LIst. TimeZone... pic.twitter.com/WzF5CoOr0o
— やま (Yama) (@yamad365) April 3, 2020
現象の説明
ギャラリーコントロール、上段がListのタイトル、下段が更新日時です。各SPOサイトのListを更新した直後の結果です。
更新日時、どちらも同じ値ですね。
では、データが格納されているListを確認してみましょう。上段が日本時間、下段がUTCです。
UTC側は9時間ズレているコトが確認できます。
タイトル列が同じ値なのは、テキスト型なので Power Apps から文字列で格納されているからですね。更新日時の列は日付型なので、日時の概念が発生しています。そして、SPOはサイトのタイムゾーンによって自動的に時間が調整されているのです。
前イメージでは、更新日時は同じ値でした。しかし、データソース側ではタイムゾーンによって異なる。
つまり***『SPOをデータソースとして利用する場合、日時を扱うフィールドはタイムゾーンに注意すべき』***ということです。
厳密には・・・
基本的に、クラウドソリューションは日時の概念は全てUTCで管理されている、と考えて差し支えありません。SPOも、CDSも、Azure の SQL Databaseも、です。(殆ど裏側一緒やんけ、っていうツッコミは無しでw)
ちなみに、AWSも基本的にはUTCで管理されているはずです。(AWSは数年触ってないので最近どうなのか知らんですが汗)
内部的な値はUTCで管理されていて、利用するソリューションのタイムゾーンがよしなに日時を調整してくれているのです。
まとめ
- クラウドの日時は基本的にUTCで管理されていると考えましょう
- 利用するデータソースとタイムゾーンで自動的に日時が変換されるコトがあります
- Power Apps 側のタイムゾーン(地域)にも影響される場合があります
日本だけで利用するアプリなら全てのタイムゾーンを日本時間(UTC+9)にしてしまえば問題は発生しないでしょう。例えば、複数の国をまたいで利用するようなアプリを考える場合は注意が必要なポイントです。データソースの値を他のソリューション(例えば、Power BI や Power Automateなど)で再利用する場合も注意が必要になります。
また、作ったアプリで「登録できたけど、日時の情報が意図した値じゃない!」みたいな場合は、データソース側のタイムゾーンが間違っているコトが多いです。タイムゾーン、けっこう奥が深いですね。
それでは、皆さま、素晴らしい Power Platform Life を!