Sdílet prostřednictvím


TimeZoneInfo.FindSystemTimeZoneById(String) Metoda

Definice

Vrátí objekt na TimeZoneInfo základě jeho identifikátoru.

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

Parametry

id
String

Identifikátor časového pásma, který odpovídá Id vlastnosti.

Návraty

Objekt, jehož identifikátor je hodnotou parametru id .

Výjimky

Systém nemá dostatek paměti pro uložení informací o časovém pásmu.

Parametr id je null.

Identifikátor časového pásma určený uživatelem id nebyl nalezen. To znamená, že identifikátor časového pásma, jehož název se shoduje id , neexistuje nebo že identifikátor existuje, ale neobsahuje žádná data časového pásma.

Tento proces nemá oprávnění potřebná ke čtení z klíče registru, který obsahuje informace o časovém pásmu.

Byl nalezen identifikátor časového pásma, ale data registru jsou poškozena.

Příklady

Následující příklad používá metodu FindSystemTimeZoneById k načtení standardního časového pásma Tokio. Tento TimeZoneInfo objekt se pak použije k převodu místního času na čas v Tokiu a k určení, jestli je to Tokio (běžný čas) nebo Tokio (letní čas).

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

Poznámky

Parametr id musí přesně odpovídat délce identifikátoru časového pásma, ale ne v případě, že by mohlo dojít k úspěšné shodě. To znamená, že porovnání s identifikátory časových id pásem nerozlišuje velká a malá písmena. Pokud chcete načíst objekty časového pásma na základě částečných shod, můžete napsat vlastní procedury, které pracují s kolekcí TimeZoneInfo objektů jen pro čtení vrácených metodou GetSystemTimeZones .

V systémech FindSystemTimeZoneById Windows se pokusí shodovat id s názvy podklíčů HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Time Zones větve registru. V Linuxu a macOS používá informace o časovém pásmu, které jsou k dispozici v knihovně ICU. Pokud registr nebo knihovna neobsahuje informace pro požadované časové pásmo, můžete vytvořit konkrétní časové pásmo voláním některého z přetížení CreateCustomTimeZone metody nebo voláním FromSerializedString deserializace objektu TimeZoneInfo , který představuje požadované časové pásmo. Časová pásma vytvořená těmito voláními metody však nejsou systémem definovaný čas a nelze je pomocí metody načíst FindSystemTimeZoneById . K těmto vlastním časovým pásmům lze přistupovat pouze prostřednictvím odkazu na objekt vrácený voláním CreateCustomTimeZone metody nebo FromSerializedString .

V .NET 7 a starších verzích tato metoda vrací novou TimeZoneInfo instanci pro každé volání metody. To může mít vliv na výkon v aplikacích, které opakovaně volají metodu FindSystemTimeZoneById se stejným identifikátorem. (V .NET 8 a novějších verzích tato metoda vždy vrací instanci uloženou TimeZoneInfo v mezipaměti.)

Platí pro

Viz také