语言

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 比较不区分大小写。 如果要根据部分匹配项检索时区对象,可以编写使用该方法返回的对象的只读集合的TimeZoneInfoGetSystemTimeZones自定义过程。

在 Windows 系统上, FindSystemTimeZoneById 尝试与注册表 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Time Zones 分支的子项名称匹配 id 。 从 .NET 6 开始,Windows 系统还支持 IANA 时区标识符(如“美国/Los_Angeles”或“太平洋/奥克兰”),提供跨平台时区解析。 仅当 NLS 未启用且未启用全球化固定模式时,Windows 才支持 IANA ID。 在 Linux 和 macOS 上,它使用 ICU 库中提供的时区信息。 如果注册表或库没有所需时区的信息,可以通过调用方法的重载 CreateCustomTimeZone 之一或调用 FromSerializedString 来反序列化 TimeZoneInfo 表示所需时区的对象来创建特定时区。 但是,这些方法调用创建的时区不是系统定义的时间,不能使用 FindSystemTimeZoneById 该方法进行检索。 只能通过或方法调用返回CreateCustomTimeZoneFromSerializedString的对象引用来访问这些自定义时区。

在 .NET 7 和更早版本中,此方法为每个方法调用返回一个新 TimeZoneInfo 实例。 这可能会影响使用相同标识符重复调用 FindSystemTimeZoneById 该方法的应用程序的性能。 (在 .NET 8 及更高版本中,此方法始终返回缓存 TimeZoneInfo 实例。

适用于

另请参阅