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í.
TimeZoneInfo Vrátí objekt na 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 hodnota parametru id .
Výjimky
Systém nemá dostatek paměti pro uchovávání informací o časovém pásmu.
Parametr id je null.
Identifikátor časového pásma zadaný službou id nebyl nalezen. To znamená, že identifikátor časového pásma, jehož název id neodpovídá, nebo že identifikátor existuje, ale neobsahuje žádná data časového pásma.
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í tokio standardního časového pásma. Tento TimeZoneInfo objekt se pak použije k převodu místního času na čas v Tokiu a k určení, zda se jedná o Tokio Standardní č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 identifikátoru časového pásma, ale ne v případě úspěšné shody. To znamená, že porovnání id s identifikátory časových pásem nerozlišuje malá a velká písmena. Pokud chcete načíst objekty časového pásma na základě částečných TimeZoneInfo shod, můžete napsat vlastní procedury, které pracují s kolekcí 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.
Počínaje rozhraním .NET 6 podporují systémy Windows také identifikátory časových pásem IANA (například "Amerika/Los_Angeles" nebo "Pacific/Auckland"), které poskytují rozlišení časových pásem napříč platformami. ID IANA jsou ve Windows podporována jenom v případě, že není povolená služba NLS a není povolený režim invariantní globalizace.
V Linuxu a macOS používá informace o časovém pásmu dostupné v knihovně ICU.
Pokud registr nebo knihovna nemá informace pro časové pásmo, které chcete, můžete vytvořit konkrétní časové pásmo voláním jednoho z přetížení CreateCustomTimeZone metody nebo voláním FromSerializedString deserializace TimeZoneInfo objektu, který představuje požadované časové pásmo.
Časová pásma vytvořená těmito voláními metody však nejsou času definovaná systémem a nelze je pomocí FindSystemTimeZoneById metody načíst.
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 metody.
V .NET 7 a starších verzích vrátí tato metoda novou TimeZoneInfo instanci pro každé volání metody. To může mít vliv na výkon v aplikacích, které metodu FindSystemTimeZoneById volají opakovaně se stejným identifikátorem. (V .NET 8 a novějších verzích tato metoda vždy vrátí instanci uloženou TimeZoneInfo v mezipaměti.)