Microsoft Dataverse では、日付と時刻の値をユーザーに表示する方法と、タイム ゾーンに合わせて調整する方法を指定できます。
ほとんどの列で使用できる標準プロパティに加えて、日付と時刻の列には 2 つの追加プロパティがあります。
- タイム ゾーンの調整: タイム ゾーンの値を調整するかどうか。
- 形式: 値の時刻部分を表示するかどうか。
タイム ゾーンの調整
Dataverse では、すべての日付と時刻の値を UTC タイム ゾーンで格納します。 アプリが値を表示するとき、またはユーザーが入力した値を処理するとき、Dataverse とモデル駆動型アプリは、これらの 動作 オプションを使用してユーザーのタイム ゾーンを調整できます。
- ユーザー ローカル: ユーザーのタイム ゾーンの値を調整します。 これは 日付 書式の既定の動作です。 これを 一度別の動作に変更 することができます。
- タイム ゾーン非依存: タイム ゾーンの変換なし。 これは 日付のみ 書式の既定の動作です。
Windows、Android、iOS、または macOS のシステム タイム ゾーンではなく、 個人用オプションでユーザーのタイム ゾーンを設定します。 ただし、システム タイム ゾーンは、JavaScript 日付を使用するクライアント スクリプト に影響を与える可能性があります。
形式
日付と時刻の列の動作が 日付のみでない限り、すべての日付と時刻の列に時刻部分があります。 形式 は、値の時刻部分を表示するかどうかを決定します。
- 日付と時刻: 値の日付と時刻を表示します。
- 日付のみ: 値の日付部分のみを表示します。
メモ
形式 が 日付のみの場合でも、ユーザーは時刻部分を変更できます。 たとえば、Web API 呼び出しを使用するか、時間部分を持つコントロールを使用します。 この動作は、時刻部分がまったく格納されない 日付のみの動作とは異なります。
使用のガイドライン
ホテルのチェックイン時刻など、タイム ゾーン情報が必要ない場合は、タイム ゾーンに依存 しないタイム ゾーンを使用します。 この選択では、すべてのタイムゾーンのユーザーに同じ日付と時刻の値が表示されます。
日付は、誕生日や記念日など、その日の時刻とタイム ゾーンに関する情報が必要ない場合 にのみ 使用します。 この選択では、すべてのタイムゾーンのユーザーに同じ日付の値が表示されます。
Date のみと独立したタイム ゾーンは、列を日付のみとして設定するのと実質的に同じです。 将来的に時刻部分が必要かどうか不明な場合は、前者を使用してください。
重要
日付のみの 形式を ユーザー ローカル 動作で使用することは避けてください。 異なるタイム ゾーンのユーザーには異なる日付が表示される場合がありますが、ほとんどのシナリオでは意図されていません。 ユーザーがモデル駆動型アプリで日付を設定すると、時刻部分はタイム ゾーンの午前 0 時に自動的に設定されます。 これにより、他のユーザーに対して日付が 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() の機能は、タイムゾーン調整が適用された値を返します:
| 動作 | 形式 | 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 でタイム ゾーンを操作する
コードを使用して、日付と時刻の列の動作と形式を構成する