Dataverse 的日期時間類型到底有幾種?一次搞懂 Format 與 Behavior

| PowerPlatform | 2 Reads

在 Microsoft Dataverse 中建立欄位時,經常會看到 Date OnlyDate and TimeUser LocalTime-Zone Independent 等選項。

乍看之下,好像 Dataverse 提供了很多種日期時間資料類型,但實際上,它們分別屬於兩個不同的概念:

  • Format:決定畫面上怎麼顯示

  • Behavior:決定資料如何儲存及是否進行時區轉換

因此,理解 Dataverse 日期時間欄位的關鍵,不是單純記住有幾種類型,而是先分清楚 Format 和 Behavior 的差別


一、Dataverse 的日期時間資料類型

從 Dataverse 的欄位中繼資料來看,日期與時間欄位使用的是 DateTime 類型。

建立欄位後,再透過 FormatBehavior 決定:

  1. 是否顯示時間;

  2. 是否根據使用者所在時區轉換;

  3. 是否真正儲存時間部分。

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 的 CreatedOnModifiedOn 等系統欄位,就是典型的 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 LocalDate 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 等,也都需要重新確認。

因此,在建立正式欄位前,最好先確認三件事:

  1. 這個值是否需要具體時間?

  2. 不同時區的使用者是否應看到不同時間?

  3. 未來是否可能需要使用目前被隱藏的時間部分?


總結

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