日時の列の動作と形式

Microsoft Dataverse では、日付と時刻のデータ型は、多くの標準的なテーブルの列で使用されています。 列が表す日付の種類に応じて、ユーザー ローカル日付のみタイム ゾーン非依存 の異なる列の動作を選択することができます。

日付と時刻の列の動作と形式

次の表には、[日付と時刻]列の動作と形式に関する説明が含まれています。

動作 フォーマット 内容
ユーザー ローカル 日付のみ
または
日付と時間
これは、ユーザー定義の日付列の既定の動作です。

列の値は、ユーザーの現在のローカル時間で表示されます。
Web サービスでは、これらの値は、共通の UTC タイム ゾーン形式を使用して返されます。

既定の動作を選択した場合、これを 1 回だけ変更することができます。 詳細 ユーザー ローカル動作の変更
日付のみ 日付のみ タイム ゾーン変換はありません。

値の時刻の部分は、常に午前 12:00 です。
値の日付の部分は、UI と Web サービスで指定されている通りに保存および取得されます。
タイム ゾーン非依存 日付のみ
または
日付と時間
タイム ゾーン変換はありません。

日付と時刻の値は、UI と Web サービスで指定されている通りに保存および取得されます。

ユーザー ローカル動作の変更:

マネージド ソリューションの発行元がこれを禁止しない限り、既存のカスタム日付列の動作を ユーザー ローカル から 日付のみ、または タイムゾーン非依存 へ変更することができます。 これは一度のみの変更です。

列の動作を変更すると、列の動作の変更後に追加、変更される列の値に影響があります。 既存の列の値は、データベース内では、UTC タイム ゾーン形式のままです。 既存の列の値の動作を UTC から [日付のみ] に変更するには、それをプログラムで実行するために開発者の支援が必要な場合があります。 詳細: データベース内の既存の日時の値の動作を変更する.

警告

既定の日時列の動作を変更するには、その前に、業務ルール、ワークフロー、計算列、またはロールアップ 列などの列のすべての依存関係を検討して、動作の変更によって問題が発生しないことを確認する必要があります。 日時列の動作を変更した後、変更したフィールドに依存する、業務ルール、ワークフロー、計算列、およびロールアップ 列のそれぞれを開いて、情報を確認し、その情報を保存して、最後の日付列の動作と値が使用されることを確認する必要があります。

ソリューションのインポート中に動作を変更する

ユーザー ローカル動作を使用して日付列を含むソリューションをインポートする場合は、動作を 日付のみ、または タイムゾーン非依存 に変更することもできます。

動作の変更を防ぐ

マネージド ソリューションの既存の日付列を配布する場合は、CanChangeDateTimeBehavior 管理プロパティを False に設定し、ソリューションを使用するユーザーが動作を変更しないようにすることができます。 詳細情報: 列のマネージド プロパティの設定

使用例

次の 日付のみ および タイム ゾーン非依存 動作の使用例について考えてみましょう。

日付のみの例: 誕生日と記念日

[日付のみ] 動作は、誕生日や記念日など時刻とタイムゾーンに関する情報が必要とされない場合に適しています。 この選択の場合、 世界のすべてのアプリ ユーザーに、まったく同じ日付の値が表示されます。

タイム ゾーン非依存の例 : ホテルのチェックイン

ホテルのチェックイン時間など、タイム ゾーン情報が必要でないときにこの動作を使用できます。 これを選択した場合、全世界のすべてのアプリ ユーザーに、同じ日時の値が表示されます。

タイムゾーンを使用するためのベスト プラクティス

期待していた日付/時刻列 (UTC /ローカル) で、反対の値が表示される

これは、テーブルの列の設定とアプリのフォームの設定の間にパリティがないことが原因です。 テーブルの列がタイムゾーン非依存、またはユーザー ローカルに構成されている場合、ストアからデータを取得する際にタイムゾーン オフセットを適用するかどうかを決定します。 ただし、アプリ フォームには UTC またはローカルの設定もあります。

これは、Dataverse から受け取ったデータをどのように解釈するかをフォームに指示します。 ストアから取得したデータがタイムゾーンに依存しないが、フォームがローカルに設定されている場合、UTC データはユーザーのタイムゾーンに基づいてユーザーのローカルタイムとしてプロファイルに表示されます。 この逆も当てはまります。フォームが UTC に設定されている場合、ストアからのユーザーローカル値は UTC として表示されます。 フォームの日付で使用するタイムゾーンの値は、既存の行を中断することなく変更することができます。

テーブルの列で日付のみを選択したが、フォームには日付とともにタイム ピッカーが表示される

これは、日付のみの列にタイムゾーンに依存しない動作、またはユーザー ローカルの動作を選択した場合に発生します。 Dataverse では既定で 00:00:00 の時刻が格納されますが、列をフォームに追加すると、時刻も設定する必要があるとみなされます。 フォームに時間ピッカーを残した場合、ユーザーは時間を入力でき 00:00:00 以外として保存されます。 どうすれば修正できますか

  • フォームを編集して、時間ピッカーと関連する数式を削除します。 これにより、時刻が 00:00:00 として保存され、タイムゾーン ベースの日付計算が可能になります。
  • 列が現在ユーザー ローカルに設定されていて、日付をタイムゾーンで計算する必要がない場合は、日付のみに変更できます。 この変更は永続的であり、元に戻すことができません。 この変更は、タイム ゾーン非依存の動作列には行うことができません。 他のアプリ、プラグイン、ワークフローがデータに依存している可能性があるため、動作の変更には常に注意してください。

日付のみの列で、一部のユーザーに対して間違った日付が表示される

このような場合は、日付のみのカラムに設定されている動作を確認してください。 列がタイムゾーンに依存しない、またはユーザー ローカルに設定されている場合、含まれているタイム スタンプにより、ユーザーごとに日付が異なって表示されます。 UTC やローカルのフォーム表示設定により、表示される日付がユーザーのタイムゾーン設定を使用して計算されるのか、それとも UTC 値として表示されるのかが決まります。 フォームの値をユーザーローカルではなく UTC に変更すると、タイムゾーン オフセットの計算が行われず、保存された行の UTC 日付が表示されます。 別の方法として、これを変更しない静的な日付にする必要があり、カラムが現在ユーザー ローカルである場合は、カラムの動作を [日付のみ] に変更することができます。 ただし、これは元に戻せないので注意してください。

私 (スクリプト/プラグイン) は、ユーザー ローカル変換が発生する前に、ユニバーサル クライアントを使用して送信された日付をインターセプトする必要がありますが、代わりにユーザー ローカル データとして扱われます

UTC とユーザー ローカルの間でデータが変換される場合、Web クライアントとユニバーサル クライアントの動作は少し異なります。 Web クライアントでは、日付がクライアントに入力され、提供されたとおりに API に渡され、後でユーザーのローカル時間に変換されます。 これにより、スクリプト/プラグインがデータを取得し、データがプラットフォーム サービスに渡されてユーザーのローカル時間に変換される前にアクションを実行できるようになりました。 ユニバーサル クライアントでは、データが API に渡される前に日付からユーザーローカル値への変換が行われます。これにより、提供されるデータは UTC 日付ではなく、取得または投稿したユーザーに基づいてユーザー ローカルになります。 これを解決するには、ユーザーは次のいずれかを実行できます。

  • フォームを UTC 値を保持するタイムゾーン非依存に変更します。 これは、ユーザーがユーザー ローカル時間でフォームを表示する必要がない場合にのみ機能します。
  • スクリプトを変更して、使用されているタイムゾーン オフセットを検出し、スクリプト内で UTC に再計算して、アクションを実行します。

[日付のみ] の動作でサポートされない日付および時刻のクエリ演算子

次の日付および時刻関連のクエリ演算子は、日付のみ に対しては無効です。 これらの演算子の 1 つが使用されると、無効な演算子の例外エラーがスローされます。

  • が X 分よりも古い
  • X 時間よりも古い
  • が過去 X 時間
  • が今後 X 時間

関連項目

列を作成、編集する
計算列を定義して手動計算を自動化する
列が管理するプロパティ
マネージド プロパティ
ブログ: Dataverse のタイムゾーンの操作

注意

ドキュメントの言語設定についてお聞かせください。 簡単な調査を行います。 (この調査は英語です)

この調査には約 7 分かかります。 個人データは収集されません (プライバシー ステートメント)。