TimeZoneInfo.FindSystemTimeZoneById(String) Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
TimeZoneInfo Zwraca obiekt na podstawie jego identyfikatora.
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
Zwraca
Obiekt, którego identyfikator jest wartością parametru id
.
Wyjątki
System nie ma wystarczającej ilości pamięci do przechowywania informacji o strefie czasowej.
Parametr id
ma wartość null
.
Nie można odnaleźć identyfikatora strefy czasowej określonej przez id
program . Oznacza to, że identyfikator strefy czasowej, którego nazwa pasuje id
, nie istnieje lub że identyfikator istnieje, ale nie zawiera żadnych danych strefy czasowej.
Proces nie ma uprawnień wymaganych do odczytu z klucza rejestru zawierającego informacje o strefie czasowej.
Znaleziono identyfikator strefy czasowej, ale dane rejestru są uszkodzone.
Przykłady
W poniższym przykładzie użyto FindSystemTimeZoneById metody , aby pobrać strefę czasową w Tokio (standardową). Ten TimeZoneInfo obiekt jest następnie używany do konwersji czasu lokalnego na czas w Tokio i ustalenia, czy jest to Tokio (czas standardowy), czy Tokio (czas letni).
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
Uwagi
Parametr id
musi odpowiadać dokładnie identyfikatorowi strefy czasowej długości, ale nie w przypadku pomyślnego dopasowania; oznacza to, że porównanie id
identyfikatorów strefy czasowej jest bez uwzględniania wielkości liter. Jeśli chcesz pobrać obiekty strefy czasowej na podstawie częściowych dopasowań, możesz napisać niestandardowe procedury, które współpracują z kolekcją TimeZoneInfo obiektów zwracanych przez metodę GetSystemTimeZones tylko do odczytu.
W systemach FindSystemTimeZoneById
Windows próbuje dopasować id
nazwy podklucza HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Time Zones gałęzi rejestru. W systemach Linux i macOS są używane informacje o strefie czasowej dostępne w bibliotece ICU. Jeśli rejestr lub biblioteka nie ma informacji o żądanych strefach czasowych, możesz utworzyć określoną strefę czasową, wywołując jedno z przeciążeń CreateCustomTimeZone metody lub wywołując FromSerializedString deserializowanie TimeZoneInfo obiektu reprezentującego wymaganą strefę czasową. Jednak strefy czasowe utworzone przez te wywołania metody nie są zdefiniowane przez system i nie można ich pobrać przy użyciu FindSystemTimeZoneById metody . Dostęp do tych niestandardowych stref czasowych można uzyskać tylko za pośrednictwem odwołania do obiektu zwróconego CreateCustomTimeZone przez wywołanie metody lub FromSerializedString .
W programie .NET 7 i starszych wersjach ta metoda zwraca nowe TimeZoneInfo wystąpienie dla każdego wywołania metody. Może to mieć wpływ na wydajność w aplikacjach, które wielokrotnie wywołuje metodę FindSystemTimeZoneById
z tym samym identyfikatorem. (W programie .NET 8 i nowszych wersjach ta metoda zawsze zwraca wystąpienie z TimeZoneInfo pamięci podręcznej).