日期及時間行的行為與格式
在 Microsoft Dataverse 中,您可以指定日期和時間值要如何顯示給使用者,以及其針對時區調整的方式。
日期和時間行可以使用兩個選項。
- 行為:是否調整時區的值。
- 格式:是否要顯示值的時間部分。
行為
Dataverse 在 UTC 時區中儲存所有日期與時間值。 當您的應用程式顯示使用者輸入的值或處理值時, Dataverse 和模型導向應用程式可以使用這些行為選項調整使用者的時區。
- 使用者本地:調整使用者時區的值。 這是預設行為。 您可以將此變更一次為其他行為。
- 時區不轉換:沒有時區轉換。
- 只有日期:沒有時區轉換。 和時區不轉換不同,將不會儲存時間部分。
使用者的時區是在個人選項中設定,而不是在 Windows、Android、 iOS 或 macOS 中的系統時區。 但是, 系統時區可能會影響使用 JavaScript 日期的用戶端指令碼。
格式
所有日期和時間行都有一個時間部分,除非其行為是只有日期。 格式:決定是否要顯示值的時間部分。
- 日期和時間:顯示值的日期與時間。
- 只有日期:只顯示值的日期部分。
注意
如果格式是只有日期,則使用者仍然可以變更時間部分。 例如,使用 Web API 呼叫或使用具有時間部分的控制項。 這不同於只有日期 行為,此時完全不會儲存時間部分。
使用方針
不需要時區資訊時,可使用時區不轉換,例如旅館登記入住時間。 選取此項時,所有時區的使用者都會看見相同的日期和時間值。
使用只有日期行為適用於不需要有關一日中的時間和時區資訊的案例,像是生日或週年紀念日。 選取此項時,所有時區的使用者都會看見完全相同的日期值。
使用只有日期格式的時區不轉換行為,實際上與只有日期行為幾乎相同 。 如果您不確定未來是否需要時間部分,請使用前者。
重要
避免只有日期格式與使用者地區行為。 不同時區的使用者可能會看到不同的日期,這在大多數情況下並不適用。 當使用者在模型導向應用程式中設定日期時,時間部分將自動設定為其時區的午夜。 這可能會導致其他使用者的日期顯示提前或晚一天。
範例
顯示值
Dataverse 儲存 2023-10-15T07:30:00Z
(或只有日期行為的 2023-10-15
)。 時區 UTC-8 中的使用者在模型驅動應用中或通過 Web API 請求查看格式化值:
行為 | 格式 | 顯示值 |
---|---|---|
使用者區域 | 日期和時間 | 2023 年 10 月 14 日,11:30 pm |
使用者區域 | 只有日期 | 2023 年 10 月 14 日 |
時區不轉換 | 日期和時間 | 2023 年 10 月 15 日,7:30 am |
時區不轉換 | 只有日期 | 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 AM。
行為 | 格式 | 儲存在 Dataverse 中的的值 |
---|---|---|
使用者區域 | 只有日期 | 2023-10-14T08:00:00Z |
時區不轉換 | 只有日期 | 2023-10-14T00:00:00Z |
只有日期 | - | 2023-10-14 |
在應用程式中輸入無效值
不同的用戶會使用不同的方式來處理無效輸入。 例如,在太平洋時區,日光節約時間從 2023 年 3 月 12 日 2:00 AM 開始,會把時間調快一小時,變成 3:00 AM。 當天 2:00 AM 到 3:00 AM 之間的時間不存在。 當使用者嘗試輸入一個在該時間範圍中的值時,應用程式可能會執行下列其中一項動作:
- 變更為前一個或下一個有效時間。
- 還原為最後知道的值。
- 顯示錯誤訊息。
- 在時間選取器中不會顯示 2:00 AM 到 3:00 AM 之間的時間,因此使用者無法在一開始選取它們。
同樣地,不同的用戶端會使用不同的方式來處理重複的時間範圍。 例如,在太平洋時區,日光節約時間在 2023 年 11 月 5 日 2:00 AM 結束,會把時間調慢一小時,變成1:00 AM。 當天 1:00 AM 到 2:00 AM 之間的時間會重複兩次。 像是 1:30 AM 的時間可能涉及兩者中任一個時區。 若需明確顯示或輸入該範圍內的時間,最好暫時切換至不使用日光節約時間的時區。
使用 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
。 用戶端 API 函數,例如 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 AM 的時間元件:
行為 | 格式 | 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 變更為只有日期,您可能需要開發人員的協助,才能轉換資料庫中現有日期與時間值的行為。
警告
在變更現有日期和時間資料行的行為之前,應先檢閱資料行的任何相依性,例如商務規則、工作流程、計算結果資料行或彙總資料行,確保變更行為沒有產生任何問題。 在變更日期和時間資料行的行為後,請開啟相依於已變更資料行的所有商務規則、工作流程、計算結果資料行和彙總資料行,檢閱資訊並儲存,以確保使用的是最新日期及時間資料行的行為和值。
變更解決方案匯入期間的行為
當您匯入包含使用使用者本地行為之日期資料行的解決方案時,您可以將行為變更為只有日期或時區不轉換。
注意
只有當您是發行者時,才能變更現有受管理的只有日期或日期和時間資料行的行為。 若要變更這些欄位,則必須先對新增只有日期或日期和時間資料行的解決方案進行升級。 其他資訊:升級或更新解決方案
避免變更行為
如果您正在受管理的解決方案中分布自訂日期資料行,可將 CanChangeDateTimeBehavior 受管理屬性設定為 False,以避免使用您的解決方案的使用者變更該行為。 其他資訊: 設定資料行的受管理屬性
只有日期行為不支援日期和時間查詢運算子
下列日期和時間相關查詢運算子對只有日期行為無效。 這些運算子的其中一個用於查詢時,會擲回無效的運算子例外狀況錯誤。
- 早於 X 分鐘
- 早於 X 小時
- 過去 X 小時
- 未來 X 小時
另請參閱
模型導向應用程式中的日期和時間問題疑難排解
建立以及編輯資料行
定義計算結果資料行以自動化手動計算
資料行的受控屬性
受控屬性
部落格:使用 Dataverse 中的時區
使用程式碼設定日期及時間行的行為與格式