Dataverseで日付が1日ずれる原因と解決策|タイムゾーン設定の落とし穴

Dataverseの日付列をDate Only(日付のみ)に設定したのに、Power Appsで表示すると1日前にずれてしまう。このバグっぽい挙動を経験したことがある方は多いと思います。原因はタイムゾーンの設定です。そして厄介なことに、列を作成した後からは変更できません。

この記事では、なぜDate Onlyでもずれるのかの仕組みと、列作成時に必ず設定すべき Time Zone Independent の選び方を解説します。

なぜDate Onlyでも日付がずれるのか

Dataverseの内部保存の仕組み

Dataverseの日付列は、内部では日付と時刻をセットで保存しています。Date Only という表示設定は、あくまでユーザーインターフェース上で時刻部分を隠しているだけです。

たとえば2026年3月22日として入力した値は、内部では 2026-03-22T00:00:00Z(深夜0時のUTC)として保存されています。このときタイムゾーンがどう扱われるかが、ずれの根本原因です。

デフォルト設定 User Local の問題

Dataverseの日付列にはタイムゾーンの動作という設定があり、デフォルトは User Local(ユーザーのローカルタイム)になっています。User Localの動作はこのような流れです。

  1. 日本(UTC+9)のユーザーが2026年3月22日を入力する
  2. Dataverseは2026-03-22T00:00:00+09:00として解釈し、UTCに変換して2026-03-21T15:00:00Zで保存する
  3. Power Appsでこの値を表示すると、UTCの値にユーザーのタイムゾーンを適用して2026年3月22日と表示される

日本国内だけで使うなら一見問題ありません。しかし Date Only として扱っているにもかかわらず、タイムゾーン変換が走ることで、ブラウザの設定や環境によって表示がずれることがあります。特に2つの問題が起きやすいです。

  • Power Automate フローで日付を取り出すと、内部保存のUTC値が返ってくるため日本時間より9時間前になる
  • 異なるタイムゾーンの環境(例:海外に設定されたテナント)で開くと前日の日付として表示される

解決策:列作成時に Time Zone Independent を選ぶ

Time Zone Independentとは

Time Zone Independent(タイムゾーン非依存)を選ぶと、入力した日付をそのままの値でDataverseに保存します。タイムゾーン変換が一切行われないため、2026年3月22日と入力したら2026-03-22としてそのまま保存されます。

日付だけを管理したいユースケース(生年月日・期限日・契約日など)では、Time Zone Independentが正解です。

設定手順

  1. Dataverseでテーブルを開き、日付列を新規作成します
  2. データ型で「日付と時刻(Date and Time)」または「日付のみ(Date Only)」を選びます
  3. 詳細オプション(Advanced options)を展開します
  4. タイムゾーンの動作(Time zone adjustment)をTime Zone Independentに変更します
  5. 保存してCreate(作成)します

詳細オプションを展開しないとこの設定が表示されないので注意が必要です。デフォルトのUser Local のまま気づかずに列を作ってしまうケースが多いです。

作成後に変更できない、という最大の注意点

このタイムゾーン設定は、列を作成した後に変更できません。User Localで作ってしまったら、既存のデータを別列に移し替えて、元の列を削除し、新しくTime Zone Independentで作り直すしかありません。

Dataverseを初めて触ったとき、この制約を知らずにUser Localで列を大量に作ってしまい、後で全部作り直した経験があります。設計の初期段階でこの選択をしっかりしておくかどうかで、後の手間がかなり変わります。テーブル設計フロー全体については、SharePointと違うDataverseのテーブル作成フローでまとめています。

Power Automateフローでの注意点

Time Zone Independentで列を作成しても、Power Automateフローで日付を扱う際は別の注意が必要です。フローで日付列の値を取得すると 2026-03-22T00:00:00Z のようなUTC形式で返ってくることがあります。この値を条件式や通知メッセージで使う場合、convertTimeZone()や formatDateTime()関数で適切な書式に変換する必要があります。

Dataverseの日付がフローで期待どおりに動かないときは、まず User LocalかTime Zone Independentかを確認し、次にフロー内の変数の型を確認するのが手順です。変数の型の扱い方についてはPower Automateで変数を使いこなす記事が参考になります。

タイムゾーン設定の選び方まとめ

設定動作使うべきケース
User Local(デフォルト)入力時のタイムゾーンを考慮してUTC変換時刻まで含めて正確に管理したいとき
Time Zone Independent入力値をそのまま保存、変換なし日付のみを管理するとき(期限・生年月日など)
UTCUTC固定で保存グローバルなシステム連携など特殊なケース

日付のみを管理するなら Time Zone Independent 一択です。これだけ覚えておけばほとんどのケースをカバーできます。

まとめ

  • DataverseのDate Only列でも、タイムゾーン設定が「User Local」だと日付がずれる可能性があります
  • 日付のみ管理するなら、列作成時に詳細オプション→Time Zone Independent を選びます
  • この設定は列作成後に変更できないため、テーブル設計の段階で必ず確認してください
  • Power Automateフローで日付を扱う場合はさらに書式変換が必要になる場合があります

Dataverseの全体像はDataverseをSharePoint経験者向けに完全解説にまとめています。

Xでフォローしよう