Microsoft Dataverse では、日付と時刻の値をユーザーに表示する方法と、タイム ゾーンに合わせて調整する方法を指定できます。
日付と時刻の列には 2 つのオプションが使用できます。
- 動作: タイムゾーンの値を調整するかどうか。
- 形式: 値の時刻部分を表示するかどうか。
動作
Dataverse では、すべての日付と時刻の値を UTC タイム ゾーンで格納します。 アプリが値を表示するとき、またはユーザーが入力した値を処理するとき、Dataverse とモデル駆動型アプリは、これらの 動作 オプションを使用してユーザーのタイム ゾーンを調整できます。
- ユーザー ローカル: ユーザーのタイム ゾーンの値を調整します。 これは 日付 書式の既定の動作です。 これを 一度別の動作に変更 することができます。
- タイム ゾーン非依存: タイム ゾーンの変換なし。 これは 日付のみ 書式の既定の動作です。
- 日付のみ: タイム ゾーンの変換なし。 タイムゾーン非依存 とは異なり、時間部分は保存されません。
ユーザーのタイム ゾーンは、Windows、Android、iOS、または macOS のシステム タイム ゾーンではなく、個人用オプション で設定されます。 ただし、システム タイム ゾーンは、JavaScript 日付を使用するクライアント スクリプト に影響を与える可能性があります。
形式
動作が 日付のみ でない限り、すべての日付と時刻の列には時刻部分があります。 形式 は、値の時刻部分を表示するかどうかを決定します。
- 日付と時刻: 値の日付と時刻を表示します。
- 日付のみ: 値の日付部分のみを表示します。
メモ
形式 が 日付のみの場合でも、ユーザーは時刻部分を変更できます。 たとえば、Web API 呼び出しを使用するか、時刻部分を持つコントロールを使用します。 これは、時刻部分がまったく保存されない 日付のみ動作 とは異なります。
使用のガイドライン
ホテルのチェックイン時間など、タイムゾーン情報を必要としない場合は、タイムゾーンに非依存 の動作を使用します。 この選択では、すべてのタイムゾーンのユーザーに同じ日付と時刻の値が表示されます。
誕生日や記念日など、その日の時刻やタイムゾーンに関する情報が必要ない場合は 日付のみ の動作を使用します。 この選択では、すべてのタイムゾーンのユーザーに同じ日付の値が表示されます。
日付のみ 形式の タイムゾーンに非依存 動作は、日付のみ 動作と実質的に同じです。 将来的に時刻部分が必要かどうか不明な場合は、前者を使用してください。
重要
日付のみの 形式を ユーザー ローカル 動作で使用することは避けてください。 異なるタイム ゾーンのユーザーには異なる日付が表示される場合がありますが、ほとんどのシナリオでは意図されていません。 ユーザーがモデル駆動型アプリで日付を設定すると、時間の部分は自動的にそのタイム ゾーンの深夜に設定されます。 これにより、他のユーザーに対して日付が 1 日早くまたは遅く表示される可能性があります。
使用例
値の表示
Dataverse は 2023-10-15T07:30:00Z (または 日付のみ 動作の場合は 2023-10-15) を格納します。 タイムゾーン UTC-8 のユーザーは、モデル駆動型アプリで、または Web API リクエストでフォーマットされた値 を見ることができます:
| 動作 | 形式 | 値の表示 |
|---|---|---|
| ユーザー ローカル | 日時 | 2023 年 10 月 14 日、午後 11 時 30 分 |
| ユーザー ローカル | 日付のみ | 2023 年 10 月 14 日 |
| タイム ゾーン非依存 | 日時 | 2023 年 10 月 15 日、午前 7 時 30 分 |
| タイム ゾーン非依存 | 日付のみ | 2023 年 10 月 15 日 |
| 日付のみ | - | 2023 年 10 月 15 日 |
アプリに値を入力する
タイム ゾーン UTC-8 のユーザーは、モデル駆動型アプリに October 14th, 2023, 11:30 pm を入力します。 値は、次のように Dataverse に保存されます:
| 動作 | 形式 | Dataverse に保存された値 |
|---|---|---|
| ユーザー ローカル | 日時 | 2023-10-15T07:30:00Z |
| ユーザー ローカル | 日付のみ | 2023-10-15T07:30:00Z |
| タイム ゾーン非依存 | 日時 | 2023-10-14T23:30:00Z |
| タイム ゾーン非依存 | 日付のみ | 2023-10-14T23:30:00Z |
| 日付のみ | - | 2023-10-14 |
ユーザーが日付 October 14th, 2023 だけを入力した場合、時間部分は午前 12:00 であるとみなされます。
| 動作 | 形式 | Dataverse に保存された値 |
|---|---|---|
| ユーザー ローカル | 日付のみ | 2023-10-14T08:00:00Z |
| タイム ゾーン非依存 | 日付のみ | 2023-10-14T00:00:00Z |
| 日付のみ | - | 2023-10-14 |
アプリに無効な値を入力する
クライアントが異なれば、無効な入力を処理する方法も異なります。 たとえば、太平洋時間帯では、2023 年 3 月 12 日午前 2 時にサマータイムが始まり、時刻が 1 時間進んで午前 3 時になります。 この日の午前 2 時から午前 3 時までの時間は存在しません。 ユーザーがその時間範囲の値を入力しようとすると、アプリは次のいずれかを実行する可能性があります:
- 前または次の有効な時刻に変更します。
- 最後に既知の値に戻します。
- エラー メッセージを表示します。
- タイムピッカーに午前 2:00 から午前 3:00 までの時刻を表示しないでください。そうすることで、ユーザーが選択できなくなります。
同様に、クライアントによって、繰り返される時間範囲を処理する方法は異なります。 たとえば、太平洋時間帯では、サマータイムは2023 年 11 月 5 日午前 2 時に終了し、時刻は 1 時間進んで午前 1 時になります。 その日の午前 1 時から午前 2 時までの時間が 2 回繰り返されます。 午前 1 時 30 分は、どちらの時間帯にも当てはまります。 その範囲の時間を明確に表示したり入力したりする必要がある場合は、一時的にサマータイムを使用しないタイムゾーンに切り替えるのが最適な回避策です。
Web API を使用して生の値を取得する
Dataverse は 2023-10-15T07:30:00Z (または 日付のみ 動作の場合は 2023-10-15) を格納します。 すべてのタイム ゾーンのユーザーは、値 に対する Web API リクエストを使用してこれらを取得します:
| 動作 | 形式 | 生の値 |
|---|---|---|
| ユーザー ローカル | 日時 | 2023-10-15T07:30:00Z |
| ユーザー ローカル | 日付のみ | 2023-10-15T07:30:00Z |
| タイム ゾーン非依存 | 日時 | 2023-10-15T07:30:00Z |
| タイム ゾーン非依存 | 日付のみ | 2023-10-15T07:30:00Z |
| 日付のみ | - | 2023-10-15 |
クライアント API で値を取得する
タイム ゾーン UTC-8 のユーザーは、モデル駆動型アプリに October 14th, 2023, 11:30 pm を入力します。
formContext.getAttribute(<column name>).getValue() などの クライアント API の機能は、タイムゾーン調整が適用された値を返します:
| 動作 | 形式 | JavaScript dateValue.toUTCString() |
|---|---|---|
| ユーザー ローカル | 日時 | 2023-10-15 07:30 (UTC) |
| ユーザー ローカル | 日付のみ | 2023-10-15 07:30 (UTC) |
タイムゾーンに非依存 動作の場合、JavaScript の日付値はブラウザのタイムゾーンになります。
| 動作 | 形式 | JavaScript dateValue.toString() |
|---|---|---|
| タイム ゾーン非依存 | 日時 | 2023-10-14 23:30 (ブラウザのタイムゾーン) |
| タイム ゾーン非依存 | 日付のみ | 2023-10-14 23:30 (ブラウザのタイムゾーン) |
JavaScript の日付値には常に時刻コンポーネントが含まれます。 そのため、日付のみ の動作には午前 12:00 の時間コンポーネントが含まれます。
| 動作 | 形式 | JavaScript dateValue.toString() |
|---|---|---|
| 日付のみ | - | 2023-10-15 00:00 (ブラウザのタイムゾーン) |
注意
JavaScript の日付値は、デバイスのオペレーティング システムの設定から得られるブラウザーのタイム ゾーンの影響を受けます。
ユーザーローカル 動作の場合、クライアント API の結果は UTC 値として解釈される必要があります。
Date.getUTCDate()、Date.getUTCHours() などを使用して作業します。 ユーザーに表示される内容を取得するには、getTimeZoneOffsetMinutes を適用します。
Date.getDate()、Date.getHours() などはブラウザのタイムゾーンで値が表示されるため、使用しないでください。
タイムゾーンに非依存 および 日付のみ の動作の場合、クライアント API の結果はブラウザのタイムゾーンの値として解釈される必要があります。
Date.getDate()、Date.getHours() などを使用して作業します。 時差を調整する必要がないので、Date.getUTCDate()、Date.getUTCHours() などは使用しないでください。
ユーザーのローカル動作を変更する
マネージド ソリューションの発行元がこれを禁止しない限り、既存のカスタム日付列の動作を ユーザー ローカル から 日付のみ、または タイムゾーン非依存 へ変更することができます。 これは一度のみの変更です。
列の動作を変更すると、列の動作の変更後に追加、変更される列の値に影響があります。 既存の列の値は、データベース内では、UTC タイム ゾーン形式のままです。 既存の列の値の動作を UTC から 日付のみy に変更するには、データベース内の既存の日付と時刻の値の動作を変換する 開発者の助けが必要となる場合もあります。
警告
既定の日時列の動作を変更するには、その前に、ビジネス ルール、ワークフロー、計算列、またはロールアップ 列などの列のすべての依存関係を検討して、動作の変更によって問題が発生しないことを確認する必要があります。 日時列の動作を変更した後、変更したフィールドに依存する、ビジネス ルール、ワークフロー、計算列、およびロールアップ 列のそれぞれを開いて、情報を確認し、その情報を保存して、最後の日付列の動作と値が使用されることを確認する必要があります。
ソリューションのインポート中に動作を変更する
ユーザー ローカル 動作の日付列を含むソリューションをインポートする場合、動作を 日付のみ または タイムゾーン非依存 に変更することができます。
メモ
あなたが発行者である場合のみ、既存の管理された 日付のみ または 日付と時刻 列の動作を変更することができます。 これらのフィールドに変更を加えるには、日付のみ または 日付と時刻 の列を追加したソリューションにアップグレードする必要があります。 詳細: ソリューションのアップグレードまたは更新
動作の変更を防ぐ
マネージド ソリューションの既存の日付列を配布する場合は、CanChangeDateTimeBehavior 管理プロパティを False に設定し、ソリューションを使用するユーザーが動作を変更しないようにすることができます。 詳細: 列のマネージド プロパティの設定
「日付のみ」の動作でサポートされない日付および時刻のクエリ演算子
次の日付および時刻関連のクエリ演算子は、日付のみ に対しては無効です。 これらの演算子の 1 つが使用されると、無効な演算子の例外エラーがスローされます。
- が X 分よりも古い
- X 時間よりも古い
- が過去 X 時間
- が今後 X 時間
参照
モデル駆動型アプリの日付と時刻に関する問題のトラブルシューティング
列を作成、編集する
計算列を定義して手動計算を自動化する
列が管理するプロパティ
管理プロパティ
ブログ: Dataverse でタイム ゾーンを操作する
コードを使用して、日付と時刻の列の動作と形式を構成する