TimeZoneInfo.FindSystemTimeZoneById(String) 方法

定義

TimeZoneInfo根據物件的標識碼傳回物件。

public:
 static TimeZoneInfo ^ FindSystemTimeZoneById(System::String ^ id);
public static TimeZoneInfo FindSystemTimeZoneById (string id);
static member FindSystemTimeZoneById : string -> TimeZoneInfo
Public Shared Function FindSystemTimeZoneById (id As String) As TimeZoneInfo

參數

id
String

對應於 Id 屬性的時區識別項。

傳回

識別項是 id 參數值的物件。

例外狀況

系統沒有足夠記憶體來容納時區的相關資訊。

id 參數為 null

找不到 id 所指定的時區識別項。 這意味名稱符合 id 的時區識別碼不存在,或識別碼存在,但不包含任何時區資料。

處理序沒有必要權限可讀取包含時區資訊的登錄機碼。

找到時區識別項,但登錄資料已損毀。

範例

下列範例會 FindSystemTimeZoneById 使用 方法來擷取東京標準時區。 然後,這個 TimeZoneInfo 物件會用來將當地時間轉換成東京的時間,並判斷它是否為「東京標準時間」或「東京日光時間」。

using System;

public class Example
{
   public static void Main()
   {
      // Get time in local time zone 
      DateTime thisTime = DateTime.Now;
      Console.WriteLine("Time in {0} zone: {1}", TimeZoneInfo.Local.IsDaylightSavingTime(thisTime) ?
                        TimeZoneInfo.Local.DaylightName : TimeZoneInfo.Local.StandardName, thisTime);
      Console.WriteLine("   UTC Time: {0}", TimeZoneInfo.ConvertTimeToUtc(thisTime, TimeZoneInfo.Local));
      // Get Tokyo Standard Time zone
      TimeZoneInfo tst = TimeZoneInfo.FindSystemTimeZoneById("Tokyo Standard Time");
      DateTime tstTime = TimeZoneInfo.ConvertTime(thisTime, TimeZoneInfo.Local, tst);      
      Console.WriteLine("Time in {0} zone: {1}", tst.IsDaylightSavingTime(tstTime) ?
                        tst.DaylightName : tst.StandardName, tstTime);
      Console.WriteLine("   UTC Time: {0}", TimeZoneInfo.ConvertTimeToUtc(tstTime, tst));
   }
}
// The example displays output like the following when run on a system in the
// U.S. Pacific Standard Time zone:
//       Time in Pacific Standard Time zone: 12/6/2013 10:57:51 AM
//          UTC Time: 12/6/2013 6:57:51 PM
//       Time in Tokyo Standard Time zone: 12/7/2013 3:57:51 AM
//          UTC Time: 12/6/2013 6:57:51 PM
open System

// Get time in local time zone 
let thisTime = DateTime.Now
printfn $"Time in {if TimeZoneInfo.Local.IsDaylightSavingTime thisTime then TimeZoneInfo.Local.DaylightName else TimeZoneInfo.Local.StandardName} zone: {thisTime}"
printfn $"   UTC Time: {TimeZoneInfo.ConvertTimeToUtc(thisTime, TimeZoneInfo.Local)}"
// Get Tokyo Standard Time zone
let tst = TimeZoneInfo.FindSystemTimeZoneById "Tokyo Standard Time"
let tstTime = TimeZoneInfo.ConvertTime(thisTime, TimeZoneInfo.Local, tst)      
printfn $"Time in {if tst.IsDaylightSavingTime tstTime then tst.DaylightName else tst.StandardName} zone: {tstTime}"
printfn $"   UTC Time: {TimeZoneInfo.ConvertTimeToUtc(tstTime, tst)}"
// The example displays output like the following when run on a system in the
// U.S. Pacific Standard Time zone:
//       Time in Pacific Standard Time zone: 12/6/2013 10:57:51 AM
//          UTC Time: 12/6/2013 6:57:51 PM
//       Time in Tokyo Standard Time zone: 12/7/2013 3:57:51 AM
//          UTC Time: 12/6/2013 6:57:51 PM
Module Example
   Public Sub Main()
      ' Get time in local time zone 
      Dim thisTime As Date = Date.Now
      Console.WriteLine("Time in {0} zone: {1}", IIf(TimeZoneInfo.Local.IsDaylightSavingTime(thisTime), 
                        TimeZoneInfo.Local.DaylightName, TimeZoneInfo.Local.StandardName), thisTime)
      Console.WriteLine("   UTC Time: {0}", TimeZoneInfo.ConvertTimeToUtc(thisTime, TimeZoneInfo.Local))
      ' Get Tokyo Standard Time zone
      Dim tst As TimeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("Tokyo Standard Time")
      Dim tstTime As Date = TimeZoneInfo.ConvertTime(thisTime, TimeZoneInfo.Local, tst)      
      Console.WriteLine("Time in {0} zone: {1}", IIf(tst.IsDaylightSavingTime(tstTime), 
                        tst.DaylightName, tst.StandardName), tstTime)
      Console.WriteLine("   UTC Time: {0}", TimeZoneInfo.ConvertTimeToUtc(tstTime, tst))
   End Sub
End Module
' The example displays output like the following when run on a system in the U.S.
' Pacific Standard Time zone:
'    Time in Pacific Standard Time zone: 12/6/2013 10:57:51 AM
'       UTC Time: 12/6/2013 6:57:51 PM
'    Time in Tokyo Standard Time zone: 12/7/2013 3:57:51 AM
'       UTC Time: 12/6/2013 6:57:51 PM

備註

參數 id 必須完全對應到時區的標識符長度,但不會在發生成功比對的情況下對應;也就是說,與時區標識碼的比較 id 不區分大小寫。 如果您想要根據部分相符專案擷取時區物件,您可以撰寫自定義程式來處理 方法所GetSystemTimeZones傳回之TimeZoneInfo物件的唯讀集合。

在 Windows 系統上, FindSystemTimeZoneById 嘗試比 id 對登錄 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Time Zones 分支的子機碼名稱。 在 Linux 和 macOS 上,它會使用 ICU 連結庫中提供的時區資訊。 如果登錄或連結庫沒有您想要的時區資訊,您可以呼叫 方法的 CreateCustomTimeZone 其中一個多載或呼叫 FromSerializedString 來還原串行化 TimeZoneInfo 代表所需時區的物件,來建立特定的時區。 不過,這些方法呼叫所建立的時區不是系統定義的時間,而且無法使用 方法擷 FindSystemTimeZoneById 取。 這些自定義時區只能透過或 FromSerializedString 方法呼叫所CreateCustomTimeZone傳回的對象參考來存取。

在 .NET 7 和舊版中,此方法會針對每個方法呼叫傳回新的 TimeZoneInfo 實例。 這可能會影響以相同標識子重複呼叫 FindSystemTimeZoneById 方法的應用程式效能。 (在 .NET 8 和更新版本中,此方法一律會傳回快取 TimeZoneInfo 的 instance.)

適用於

另請參閱