日期、時間和時區

除了基本 DateTime 結構之外,.NET 還會提供下列支援處理時區的類別:

  • TimeZone

    使用這個類別,以處理系統的當地時區和國際標準時間 (UTC) 區域。 TimeZoneInfo 類別基本上已取代 TimeZone 類別的功能。

  • TimeZoneInfo

    使用此類別可搭配系統上預先定義的任何時區建立新的時區,以及將一個時區的日期和時間輕鬆轉換到另一個時區。 在開發新程式時,請使用 TimeZoneInfo 類別而非 TimeZone 類別。

  • DateTimeOffset

    使用這個結構,來處理與 UTC 的位移 (或差異) 已知的日期和時間。 DateTimeOffset 結構會合併日期和時間值與該時間與 UTC 的位移。 基於其與 UTC 的關聯性,個別日期和時間值會明確地識別單一時間點。 這可讓 DateTimeOffset 值從某部電腦到另一部電腦的可攜性優於 DateTime 值。

從 .NET 6 開始,您可使用以下類型:

  • DateOnly

    使用只代表日期的值時,請使用這個結構。 日期代表一整天 (一天的開始到結束)。 DateOnly 的範圍介於 0001-01-019999-12-31 之間。 此外,此類型代表月份、日期和年份的組合,而不含特定時間。 如果您先前在程式碼中使用 DateTime 型別來代表日期,但略過時間,則請在其中使用此型別。 如需詳細資訊,請參閱如何使用 DateOnly 和 TimeOnly 結構

  • TimeOnly

    使用此結構來表示不含日期的時間。 時間代表非特定日期的時數、分鐘數和秒數。 TimeOnly 的範圍介於 00:00:00.000000023:59:59.9999999 之間。 如果您在程式碼中使用 DateTimeTimeSpan 型別來表示時間,則可改為使用此型別。 如需詳細資訊,請參閱如何使用 DateOnly 和 TimeOnly 結構

下節所提供的資訊可協助您使用時區,以及建立時區感知應用程式,來轉換不同時區的日期和時間。

本節內容

時區概觀
討論有關建立時區感知應用程式的術語、概念和問題。

在 DateTime、DateTimeOffset、TimeSpan 與 TimeZoneInfo 之間選擇
說明處理日期和時間資料時,何時該使用 DateTimeDateTimeOffsetTimeZoneInfo 型別。

尋找定義於本機系統的時區
描述如何列舉在本機系統上找到的時區。

作法:列舉電腦上既有的時區
提供範例,以列舉電腦登錄中所定義的時區,並讓使用者從清單中選取預先定義的時區。

操作說明:存取預先定義的 UTC 和當地時區物件
描述如何存取國際標準時間和當地時區。

操作說明:將 TimeZoneInfo 物件具現化
說明如何將 TimeZoneInfo 物件從本機系統登錄中具現化。

將 DateTimeOffset 物件具現化
說明如何具現化 DateTimeOffset 物件,以及如何將 DateTime 值轉換為 DateTimeOffset 值。

操作說明:建立沒有調整規則的時區
描述如何建立不支援日光節約時間轉換的自訂時區。

操作說明:建立有調整規則的時區
描述如何建立支援一或多種日光節約時間轉換的自訂時區。

儲存和還原時區
描述時區資料的序列化和還原序列化 TimeZoneInfo 支援,並說明可使用這些功能的部分案例。

操作說明:將時區儲存到內嵌資源
描述如何建立自訂時區,並在資源檔中儲存資訊。

操作說明:從內嵌資源還原時區
描述如何具現化已儲存至內嵌資源檔的自訂時區。

使用日期和時間執行算術運算
說明有關新增、刪減和比較 DateTimeDateTimeOffset 值的問題。

作法:在日期和時間算術中使用時區
討論如何執行反映時區調整規則的日期和時間運算。

在 DateTime 與 DateTimeOffset 之間轉換
描述如何在 DateTimeDateTimeOffset 值之間轉換。

在各時區間轉換時間
描述如何將時間從某個時區轉換為另一個時區。

操作說明:解決模稜兩可的時間
描述如何將模稜兩可的時間對應至時區標準時間來解決模稜兩可的時間。

操作說明:讓使用者解決模稜兩可的時間
描述如何讓使用者決定模稜兩可的當地時間與國際標準時間之間的對應。

參考

System.TimeZoneInfo