Dataverse 的日期時間類型到底有幾種?一次搞懂 Format 與 Behavior
Copyright Notice: This article is an original work licensed under the CC 4.0 BY-NC-ND license.
If you wish to repost this article, please include the original source link and this copyright notice.
Source link: https://v2know.com/article/1338
在 Microsoft Dataverse 中建立欄位時,經常會看到 Date Only、Date and Time、User Local、Time-Zone Independent 等選項。
乍看之下,好像 Dataverse 提供了很多種日期時間資料類型,但實際上,它們分別屬於兩個不同的概念:
-
Format:決定畫面上怎麼顯示
-
Behavior:決定資料如何儲存及是否進行時區轉換
因此,理解 Dataverse 日期時間欄位的關鍵,不是單純記住有幾種類型,而是先分清楚 Format 和 Behavior 的差別。
一、Dataverse 的日期時間資料類型
從 Dataverse 的欄位中繼資料來看,日期與時間欄位使用的是 DateTime 類型。
建立欄位後,再透過 Format 和 Behavior 決定:
-
是否顯示時間;
-
是否根據使用者所在時區轉換;
-
是否真正儲存時間部分。
Microsoft 官方文件也將日期時間欄位拆分為「時區調整」和「顯示格式」兩個屬性。
可以簡單理解為:
Dataverse 的日期時間欄位底層是一套資料類型,但透過不同的 Format 與 Behavior,形成多種實際使用方式。
二、Format:決定日期時間怎麼顯示
Dataverse 日期時間欄位的 Format 主要有兩種。
| Format | 說明 | 顯示範例 |
|---|---|---|
Date Only |
畫面只顯示日期 | 2026-07-29 |
Date and Time |
顯示日期和時間 | 2026-07-29 13:30 |
需要特別注意:
Format 只控制顯示,不一定會改變實際儲存的資料。
例如,一個欄位的 Format 設定為 Date Only,可能只是把時間部分隱藏起來。透過 Web API、程式或其他控制項,仍然有可能修改其時間部分。
這和後面要介紹的 Date Only Behavior 並不是同一回事。Microsoft 官方文件也特別說明:只有 Behavior 為 Date Only 時,時間部分才不會被儲存。
三、Behavior:決定時區和儲存方式
Behavior 決定 Dataverse 如何處理日期時間值。
主要有以下三種。
1. User Local
User Local 會根據目前使用者的時區轉換顯示時間。
例如,同一筆資料表示的是:
2026-07-29 04:00 UTC
日本使用者可能看到:
2026-07-29 13:00
其他時區的使用者則會看到對應的當地時間。
User Local 適合用來記錄:
-
資料建立時間
-
資料更新時間
-
會議開始時間
-
實際事件發生時間
-
預約時間
-
作業執行時間
Dataverse 的 CreatedOn 和 ModifiedOn 等系統欄位,就是典型的 User Local 欄位。這類值通常以 UTC 為基礎儲存,顯示時再轉換成使用者時區。
2. Time-Zone Independent
Time-Zone Independent 不會根據使用者時區轉換。
假設儲存的內容是:
2026-07-29 09:00
那麼無論使用者在日本、中國、美國還是歐洲,看到的都會是:
2026-07-29 09:00
它適合用來保存:
-
固定營業時間
-
固定批次執行時間
-
酒店入住或退房時間
-
不應因時區改變的業務時間
-
所有地區都必須顯示相同值的時間
這種 Behavior 不進行時區換算,因此使用時要確認這個時間究竟代表「某個絕對時刻」,還是單純的「固定鐘點」。
3. Date Only
Date Only Behavior 只保存日期,不保存時間部分,也不進行時區轉換。
例如:
2026-07-29
它適合用來保存:
-
生日
-
紀念日
-
申請日
-
判定基準日
-
單純的業務日期
-
不需要具體時刻的截止日期
透過 Web API 取得時,這類欄位會以 Date 而不是 DateTimeOffset 的形式處理。
四、最容易混淆的地方:兩種 Date Only
Dataverse 中有兩個地方都會出現 Date Only。
Date Only Format
只是不顯示時間。
實際資料仍可能包含時間部分。
Date Only Behavior
真正只儲存日期。
時間部分根本不會保存。
因此,下面兩種設定看起來可能一樣,但底層意義不同:
| Behavior | Format | 畫面顯示 | 是否保留時間 |
|---|---|---|---|
Time-Zone Independent |
Date Only |
僅日期 | 是 |
Date Only |
固定為日期 | 僅日期 | 否 |
如果未來可能需要恢復時間部分,可以考慮使用:
Time-Zone Independent + Date Only Format
如果業務上永遠只需要日期,則應直接使用:
Date Only Behavior
Microsoft 官方也指出,Time-Zone Independent 配合 Date Only Format,在日常顯示效果上與 Date Only Behavior 非常接近,但前者仍然保留時間部分。
五、常見組合
實際開發時,常見的組合如下。
| Behavior | Format | 用途 |
|---|---|---|
User Local |
Date and Time |
實際發生時間、建立時間、更新時間 |
User Local |
Date Only |
不推薦,跨時區可能出現日期偏移 |
Time-Zone Independent |
Date and Time |
固定業務時間 |
Time-Zone Independent |
Date Only |
畫面只顯示日期,但保留時間 |
Date Only |
僅日期 | 生日、申請日、紀念日等純日期 |
其中尤其要避免:
User Local + Date Only Format
原因是資料本身仍會進行時區轉換,只是畫面不顯示時間。當不同時區的使用者查看同一筆資料時,日期可能提前或延後一天。
Microsoft 官方也明確建議,通常不要將 User Local 與 Date Only Format 組合使用。
六、Dataverse 有沒有 Time Only 類型?
Dataverse 沒有獨立的 Time Only 欄位類型。
也就是說,不能直接建立一個只保存:
09:30
而完全不包含日期的時間欄位。
如果業務上只需要時間,可以考慮以下方案。
方法一:使用文字欄位
例如保存:
09:30
優點是簡單直觀。
缺點是比較、排序和時間計算較麻煩,也需要自行驗證輸入格式。
方法二:使用整數保存分鐘數
例如:
09:30 = 9 × 60 + 30 = 570
優點是容易比較、排序和計算。
缺點是顯示時需要轉換回 HH:mm 格式。
方法三:使用固定日期搭配 Date and Time
例如統一使用:
1900-01-01 09:30
實際業務只讀取時間部分。
這種做法可以使用 Dataverse 原生日期時間功能,但開發人員必須確保固定日期不會被當作真正的業務日期使用。
七、從 Access 遷移到 Dataverse 時怎麼選?
Access 的 Date/Time 類型可以同時保存日期和時間,因此遷移到 Dataverse 時,不能只看 Access 中的資料類型,還要看欄位的實際用途。
可以參考以下原則。
| Access 欄位的實際用途 | Dataverse 建議設定 |
|---|---|
| 只保存年月日 | Date Only Behavior |
| 保存實際發生時刻 | User Local + Date and Time |
| 所有人都必須看到相同時間 | Time-Zone Independent + Date and Time |
| 只需要顯示日期,但未來可能使用時間 | Time-Zone Independent + Date Only |
| 只保存時、分 | 文字或整數分鐘 |
例如,欄位雖然在 Access 中是 Date/Time,但內容一直都是:
2026-07-29 00:00:00
這不一定代表它需要保存時間。
如果業務含義只是「受理日」或「申請日」,遷移到 Dataverse 時通常應改成真正的 Date Only Behavior。
相反,如果欄位表示「資料登錄的準確時刻」,則應使用 User Local。
八、修改既有欄位時的注意事項
日期時間欄位建立完成後,Behavior 並不是可以隨意來回切換的普通設定。
一般情況下,自訂欄位可以從 User Local 一次性改為:
-
Date Only -
Time-Zone Independent
但不能任意反向修改。
更重要的是,改變 Behavior 後,既有資料不一定會自動按照新規則重新轉換。依賴此欄位的 Business Rule、Workflow、Calculated Column、Rollup Column 等,也都需要重新確認。
因此,在建立正式欄位前,最好先確認三件事:
-
這個值是否需要具體時間?
-
不同時區的使用者是否應看到不同時間?
-
未來是否可能需要使用目前被隱藏的時間部分?
總結
Dataverse 日期時間欄位可以用下面這句話概括:
Format 決定怎麼顯示,Behavior 決定怎麼儲存以及是否轉換時區。
Format 有兩種:
-
Date Only -
Date and Time
Behavior 主要有三種:
-
User Local -
Time-Zone Independent -
Date Only
選擇時可以遵循以下原則:
-
記錄真實發生時刻:使用
User Local -
保存固定、不轉換的日期時間:使用
Time-Zone Independent -
永遠只需要年月日:使用
Date Only -
只需要時分:改用文字、整數分鐘或固定日期方案
日期時間欄位一旦選錯,往往不會立刻報錯,而是在跨時區、匯入資料、呼叫 API 或產生報表時,才出現日期提前一天或時間偏移等問題。
因此,在 Dataverse 中設計日期時間欄位時,真正需要先確認的不是「畫面想顯示什麼」,而是:
這個值在業務上究竟代表一個日期、一個固定鐘點,還是一個真實發生的時刻?
This article was last edited at