TimeZoneInfo.FindSystemTimeZoneById(String) 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
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
參數值的物件。
例外狀況
系統沒有足夠記憶體來容納時區的相關資訊。
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.)