TimeZoneInfo.FindSystemTimeZoneById(String) Metod

Definition

Returnerar ett TimeZoneInfo objekt baserat på dess identifierare.

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

Parametrar

id
String

Tidszonsidentifieraren, som motsvarar Id egenskapen.

Returer

Ett objekt vars identifierare är värdet för parametern id .

Undantag

Systemet har inte tillräckligt med minne för att lagra information om tidszonen.

Parametern id är null.

Det gick inte att hitta tidszonsidentifieraren som angavs av id . Det innebär att en tidszonsidentifierare vars namn matchar id inte finns eller att identifieraren finns men inte innehåller några tidszonsdata.

Processen har inte de behörigheter som krävs för att läsa från registernyckeln som innehåller tidszonsinformationen.

Tidszonsidentifieraren hittades, men registerdata är skadade.

Exempel

I följande exempel används FindSystemTimeZoneById metoden för att hämta Tokyos standardtidszon. Det här TimeZoneInfo objektet används sedan för att konvertera den lokala tiden till tiden i Tokyo och för att avgöra om det är Tokyos standardtid eller Tokyos sommartid.

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

Kommentarer

Parametern id måste motsvara exakt tidszonens identifierare i längd, men inte om en lyckad matchning ska inträffa. Jämförelsen av id med tidszonsidentifierare är skiftlägeskänslig. Om du vill hämta tidszonsobjekt baserat på partiella matchningar kan du skriva anpassade procedurer som fungerar med den skrivskyddade samlingen med TimeZoneInfo objekt som returneras av GetSystemTimeZones metoden.

På Windows system försöker FindSystemTimeZoneById matcha id med undernyckelnamnen för HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Time Zones-grenen i registret. Från och med .NET 6 stöder Windows system även IANA-tidszonsidentifierare (till exempel "America/Los_Angeles" eller "Pacific/Auckland"), vilket ger plattformsoberoende tidszonsupplösning. IANA-ID:n stöds endast på Windows om NLS inte är aktiverat och globaliseringsläget inte är aktiverat. I Linux och macOS används tidszonsinformation som är tillgänglig i ICU-biblioteket. Om registret eller biblioteket inte har den information för tidszonen du önskar kan du skapa en viss tidszon antingen genom att anropa en av överlagringarna av CreateCustomTimeZone metoden eller genom att anropa FromSerializedString för att deserialisera ett TimeZoneInfo objekt som representerar den tidszon som krävs. Tidszoner som skapas av dessa metodanrop är dock inte systemdefinierade och kan inte hämtas med hjälp av FindSystemTimeZoneById metoden. Dessa anpassade tidszoner kan endast nås via objektreferensen som returneras av metodanropet CreateCustomTimeZone eller FromSerializedString .

I .NET 7 och tidigare versioner returnerar den här metoden en ny TimeZoneInfo-instans för varje metodanrop. Detta kan påverka prestanda i program som anropar FindSystemTimeZoneById metoden upprepade gånger med samma identifierare. (I .NET 8 och senare versioner returnerar den här metoden alltid en cachelagrad TimeZoneInfo-instans.)

Gäller för

Se även