日期、時間和時區
.NET 提供代表日期、時間和時區的類型。 本文說明這些類型。
除了基本 DateTime 結構之外,.NET 還提供下列類別來支援使用時區:
-
使用此類別來處理系統上預先定義的任何時區、建立新的時區,以及輕鬆地將日期和時間從某個時區轉換成另一個時區。 針對新的開發,請使用 TimeZoneInfo 類別,而不是 TimeZone 類別。
-
使用此結構體來處理其與UTC位移(或差異)已知的日期和時間。 DateTimeOffset 結構會將日期和時間值及其相對 UTC 的位移結合在一起。 由於其與UTC的關聯性,個別日期和時間值明確識別單一時間點。 這使得 DateTimeOffset 值比 DateTime 值更能方便地從一部計算機轉移到另一部。
以下支援時間相關作業的類別:
-
使用此結構來表示時間間隔,例如經過的時間量或兩個日期之間的差異。
-
使用此結構來表示沒有日期的時間。 時間代表非特定日期的小時、分鐘和秒。
TimeOnly
的範圍是從00:00:00.0000000
到23:59:59.9999999
。 當您使用這些類型來表示時間時,此類型可用來取代程式代碼中的DateTime
和TimeSpan
類型。 如需詳細資訊,請參閱 如何使用 DateOnly 和 TimeOnly 結構。重要
TimeOnly 不適用於 .NET Framework。
-
這是提供時間抽象概念的基類。 檢查目前時間的常見方式是使用
DateTime.UtcNow
或DateTimeOffset.UtcNow
。 不過,這些類型不會提供對於什麼被認為是「現在」的任何控制權。為什麼你想要控制這一點? 可測試性。 例如,假設您正在撰寫事件追蹤應用程式,以在事件前1天提供提醒。 應用程式的邏輯是每小時檢查事件時間,並在事件發生前 24 小時警示使用者。 當您撰寫應用程式測試時,會提供自己的類型來封裝DateTimeOffset.UtcNow
,以便測試這個邏輯。不過現在 .NET 已經為您提供了一個抽象類別。如需詳細資訊,請參閱 什麼是TimeProvider。
TimeProvider
類型包含在 .NET 中。針對 .NET Framework 和 .NET Standard,
TimeProvider
是由 Microsoft.Bcl.TimeProvider NuGet 套件提供。
支援使用日期的下列類別:
-
使用只代表日期的值時,請使用這個結構。 日期代表從一天開始到結束整整一天。
DateOnly
的範圍是從0001-01-01
至9999-12-31
。 而且,此類型代表沒有特定時間的月份、日和年組合。 如果您先前在程式代碼中使用DateTime
類型來代表忽略時間的日期,請在其位置使用此類型。 如需詳細資訊,請參閱 如何使用 DateOnly 和 TimeOnly 結構。重要
DateOnly 不適用於 .NET Framework。
下一節提供您需要處理時區的資訊,以及建立時區感知應用程式,以將日期和時間從某個時區轉換成另一個時區。
在本節中
時區概觀
討論建立時區感知應用程式的術語、概念和問題。
在 DateTime、DateTimeOffset、TimeSpan 和 TimeZoneInfo 之間進行選擇
討論使用日期和時間數據時,使用 DateTime、DateTimeOffset和 TimeZoneInfo 型別的時機。
尋找本機系統上定義的時區
描述如何列舉本機系統上找到的時區。
如何:列舉計算機上存在的時區
提供範例,列舉計算機登錄中定義的時區,讓使用者從清單中選取預先定義的時區。
如何:存取預先定義的UTC和當地時區物件
描述如何存取國際標準時間和當地時區。
如何:實例化 TimeZoneInfo 物件
描述如何從本機系統登錄具現化 TimeZoneInfo 物件。
建立 DateTimeOffset 物件
討論可以具現化 DateTimeOffset 物件的方式,以及 DateTime 值可以轉換成 DateTimeOffset 值的方式。
如何:建立沒有調整規則的時區
描述如何建立不支援日光節約時間轉換的自訂時區。
如何:使用調整規則建立時區
描述如何建立支援一個或多個日光節約時間來回轉換的自訂時區。
儲存和還原時區
描述 TimeZoneInfo 對時區數據的序列化和反序列化的支援,並說明可以使用這些功能的一些情境。
如何:將時區儲存至內嵌資源
描述如何建立自定義時區,並將其資訊儲存在資源檔中。
如何:從內嵌資源還原時區
描述如何具現化已儲存至內嵌資源檔的自定義時區。
使用日期和時間執行算術運算
討論新增、減去和比較 DateTime 和 DateTimeOffset 值所涉及的問題。
如何:在日期和時間運算中使用時區
討論如何執行反映時區調整規則的日期和時間算術。
DateTime 與 DateTimeOffset 之間的轉換
描述如何在 DateTime 和 DateTimeOffset 值之間轉換。
在時區之間轉換時間
描述如何將時間從某個時區轉換成另一個時區。
如何解決時間不明確的問題
描述如何透過將模糊時間對應到時區的標準時間來解決問題。
如何:讓使用者解決模棱兩可的時間
描述如何讓用戶判斷模棱兩可的當地時間與國際標準時間之間的對應。