Teilen über


TimeZoneInfo.FindSystemTimeZoneById(String) Methode

Definition

Gibt ein TimeZoneInfo Objekt basierend auf seinem Bezeichner zurück.

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

Parameter

id
String

Der Zeitzonenbezeichner, der der Id Eigenschaft entspricht.

Gibt zurück

Ein Objekt, dessen Bezeichner der Wert des id Parameters ist.

Ausnahmen

Das System verfügt nicht über genügend Arbeitsspeicher, um Informationen zur Zeitzone zu speichern.

Der id Parameter ist null.

Der angegebene id Zeitzonenbezeichner wurde nicht gefunden. Dies bedeutet, dass ein Zeitzonenbezeichner, dessen Name nicht id vorhanden ist oder der Bezeichner vorhanden ist, aber keine Zeitzonendaten enthält.

Der Prozess verfügt nicht über die erforderlichen Berechtigungen zum Lesen aus dem Registrierungsschlüssel, der die Zeitzoneninformationen enthält.

Der Zeitzonenbezeichner wurde gefunden, aber die Registrierungsdaten sind beschädigt.

Beispiele

Im folgenden Beispiel wird die FindSystemTimeZoneById Methode verwendet, um die Tokio Standardzeitzone abzurufen. Dieses TimeZoneInfo Objekt wird dann verwendet, um die Ortszeit in die Zeit in Tokio zu konvertieren und zu bestimmen, ob es sich um Tokio Standardzeit oder Tokio Sommerzeit handelt.

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

Hinweise

Der id Parameter muss exakt dem Bezeichner der Zeitzone in der Länge entsprechen, aber nicht für den Fall, dass eine erfolgreiche Übereinstimmung auftritt; d. h. der Vergleich id mit Zeitzonenbezeichnern ist ohne Groß-/Kleinschreibung zu beachten. Wenn Sie Zeitzonenobjekte basierend auf partiellen Übereinstimmungen abrufen möchten, können Sie benutzerdefinierte Prozeduren schreiben, die mit der schreibgeschützten Auflistung von TimeZoneInfo Objekten funktionieren, die von der GetSystemTimeZones Methode zurückgegeben werden.

Unter Windows-Systemen wird versucht, FindSystemTimeZoneById den Unterschlüsselnamen des HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Time Zones Zweigs der Registrierung zuzuordnen id . Ab .NET 6 unterstützen Windows-Systeme auch IANA-Zeitzonen-IDs (z. B. "America/Los_Angeles" oder "Pacific/Auckland"), die eine plattformübergreifende Zeitzonenauflösung bereitstellen. IANA-IDs werden nur unter Windows unterstützt, wenn NLS nicht aktiviert ist und der globalisierungsinvariante Modus nicht aktiviert ist. Unter Linux und macOS werden Zeitzoneninformationen verwendet, die in der ICU-Bibliothek verfügbar sind. Wenn die Registrierung oder Bibliothek nicht über die gewünschten Informationen für die gewünschte Zeitzone verfügt, können Sie eine bestimmte Zeitzone erstellen, indem Sie eine der Überladungen der CreateCustomTimeZone Methode aufrufen oder indem Sie ein FromSerializedStringTimeZoneInfo Objekt deserialisieren, das die erforderliche Zeitzone darstellt. Zeitzonen, die von diesen Methodenaufrufen erstellt wurden, sind jedoch keine vom System definierte Zeit und können nicht mithilfe der FindSystemTimeZoneById Methode abgerufen werden. Auf diese benutzerdefinierten Zeitzonen kann nur über den objektverweis zugegriffen werden, der vom Aufruf der Methode oder FromSerializedString vom Aufruf der CreateCustomTimeZone Methode zurückgegeben wird.

In .NET 7 und früheren Versionen gibt diese Methode eine neue TimeZoneInfo Instanz für jeden Methodenaufruf zurück. Dies kann sich auf die Leistung in Anwendungen auswirken, die die FindSystemTimeZoneById Methode wiederholt mit demselben Bezeichner aufrufen. (In .NET 8 und höheren Versionen gibt diese Methode immer eine zwischengespeicherte TimeZoneInfo Instanz zurück.)

Gilt für:

Weitere Informationen