TimeZoneInfo.FindSystemTimeZoneById(String) Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
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
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.)