時區概觀

TimeZoneInfo 類別可簡化時區感知應用程式的建立。 TimeZone 類別支援使用當地時區和國際標準時間 (UTC)。 TimeZoneInfo 類別支援這兩個區域,以及登錄中預先定義資訊的任何時區。 您也可以使用 TimeZoneInfo 來定義系統沒有相關資訊的自訂時區。

時區基本功能

時區是使用相同時間的地理區域。 相鄰時區一般但不一定會相差一個小時。 任何全世界時區的時間可以表示為與國際標準時間 (UTC) 的位移。

許多全世界的時區都支援日光節約時間。 日光節約時間會嘗試將日光時數延到最長,方法是將春天或夏初的時間前進一個小時,並在夏末或秋天回復正常 (或標準) 時間。 這些標準時間的變更稱為調整規則。

透過固定或浮動調整規則,可以定義轉換至及轉換自特定時區的日光節約時間。 固定調整規則會設定每年轉換至或轉換自日光節約時間的特定日期。 例如,每年在 10 月 25 日從日光節約時間到標準時間的轉換會遵循固定調整規則。 更常見的是浮動調整規則,可設定在特定月份特定週特定一天轉換至或轉換自日光節約時間。 例如,在三月第三個星期日從標準時間到日光節約時間的轉換會遵循浮動調整規則。

對於支援調整規則的時區,轉換至和轉換自日光節約時間會建立兩種異常時間︰無效的時間和不明確的時間。 無效時間是從標準時間轉換到日光節約時間所建立的不存在時間。 例如,如果在特定日期的上午 2:00 發生此轉換,並導致時間變更為上午 3:00,則上午 2:00 到上午 2:59:59 之間的每個時間間隔皆無效。 不明確的時間是可以對應至單一時區中兩個不同時間的時間。 它是透過從日光節約時間轉換到標準時間所建立。 例如,如果在特定日期的上午 2:00 發生此轉換,並導致時間變更為上午 1:00,則上午 1:00 到上午 1:59:59 之間的每個時間間隔皆可以轉譯為標準時間或日光節約時間。

時區術語

下表定義在使用時區以及開發時區感知應用程式時常用的詞彙。

詞彙 定義
調整規則 一種規則,定義何時從標準時間轉換為日光節約時間,以及何時從日光節約時間轉換回標準時間。 每個調整規則都會有定義規則何時就緒的開始和結束日期 (例如,調整規則是從 1986 年 1 月 1 日到 2006 年 12 月 31 日就緒)、差異 (標準時間因套用調整規則而變更的時間量),以及調整期間進行轉換之特定日期和時間的相關資訊。 轉換可以遵循固定規則或浮動規則。
不明確的時間 可以對應至單一時區中兩個不同時間的時間。 發生時機是往回調整時鐘時間,例如從時區的日光節約時間轉換到其標準時間期間。 例如,如果在特定日期的上午 2:00 發生此轉換,並導致時間變更為上午 1:00,則上午 1:00 到上午 1:59:59 之間的每個時間間隔皆可以轉譯為標準時間或日光節約時間。
固定規則 設定在特定日期轉換至或轉換自日光節約時間的調整規則。 例如,每年在 10 月 25 日從日光節約時間到標準時間的轉換會遵循固定調整規則。
浮動規則 設定在特定月份特定週特定一天轉換至或轉換自日光節約時間的調整規則。 例如,在三月第三個星期日從標準時間到日光節約時間的轉換會遵循浮動調整規則。
無效時間 不存在時間是從標準時間轉換到日光節約時間的成品。 發生時機是往前調整時鐘時間,例如從時區標準時間轉換到其日光節約時間。 例如,如果在特定日期的上午 2:00 發生此轉換,並導致時間變更為上午 3:00,則上午 2:00 到上午 2:59:59 之間的每個時間間隔皆無效。
轉換時間 特定時區中特定時間變更的相關資訊,例如從日光節約時間變更為標準時間,或從標準時間變更為日光節約時間。

時區和 TimeZoneInfo 類別

在 .NET 中,TimeZoneInfo 物件代表時區。 TimeZoneInfo 類別包含傳回 GetAdjustmentRules 物件陣列的 TimeZoneInfo.AdjustmentRule 方法。 此陣列的每個項目都會提供特定時間週期與日光節約時間互相轉換的相關資訊。 (對於不支援日光節約時間的時區,此方法會傳回空陣列。)每個 TimeZoneInfo.AdjustmentRule 物件都有一個 DaylightTransitionStart 和一個 DaylightTransitionEnd 屬性,會定義轉換自/至日光節約時間的特定日期和時間。 IsFixedDateRule 屬性會指出該轉換是固定或浮動的。

.NET 依賴於 Windows 作業系統所提供的時區資訊,並儲存在登錄中。 由於地球時區的數目,並非所有現有的時區都會在登錄中表示。 此外,由於登錄是動態結構,因此可以新增或移除預先定義的時區。 最後,登錄不一定包含歷史時區資料。 例如,在 Windows XP 中,登錄只包含一組時區調整的相關資料。 Windows Vista 支援動態時區資料,這表示單一時區可以有多個調整規則,這些規則適用於特定年份的間隔。 不過,在 Windows Vista 登錄中定義的大部分時區,以及支援日光節約時間只有一或兩個預先定義的調整規則。

登錄上 TimeZoneInfo 類別的相依性表示時區感知應用程式不能是登錄中定義的特定時區。 因此,嘗試具現化特定時區 (非當地時區或代表 UTC 的時區) 應該使用例外狀況處理。 如果無法從登錄具現化必要 TimeZoneInfo 物件,則其也應該提供某種方法來繼續應用程式。

為了處理缺少必要的時區,TimeZoneInfo 類別包含 CreateCustomTimeZone 方法,您可以使用此方法來建立登錄中找不到的自訂時區。 如需關於建立自訂時區的詳細資料,請參閱 HOW TO:建立不使用調整規則的時區HOW TO:建立使用調整規則的時區。 此外,您可以使用 ToSerializedString 方法來將新建立的時區轉換成字串,並將其儲存在資料存放區 (例如資料庫、文字檔、登錄或應用程式資源)。 然後,您可以使用 FromSerializedString 方法將這個字串轉換回 TimeZoneInfo 物件。 如需詳細資料,請參閱 HOW TO:將時區儲存到內嵌資源,以及 HOW TO:從內嵌資源還原時區

因為每個時區都會具備與 UTC 的基底位移,以及具備反映任何現有調整規則之與 UTC 的位移,所以某個時區的時間可以輕鬆地轉換為另一個時區的時間。 基於此目的,TimeZoneInfo 物件包含數種轉換方法,包含︰

如需各時區間轉換時間的詳細資訊,請參閱在各時區間轉換時間

另請參閱