TimeZoneInfo.FindSystemTimeZoneById(String) Metodo

Definizione

Crea un'istanza di un nuovo oggetto TimeZoneInfo in base al relativo identificatore.

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

Parametri

id
String

Identificatore del fuso orario, corrispondente alla proprietà Id.

Restituisce

TimeZoneInfo

Oggetto il cui identificatore è il valore del parametro id.

Eccezioni

Il sistema non ha memoria sufficiente per contenere le informazioni sul fuso orario.

Il valore del parametro id è null.

L'identificatore del fuso orario specificato da id non è stato trovato. Questo significa che non esiste un identificatore del fuso orario il cui nome corrisponde a id o che l'identificatore esiste ma non contiene dati sul fuso orario.

Il processo non ha le autorizzazioni necessarie per leggere dalla chiave del Registro di sistema che contiene le informazioni sul fuso orario.

L'identificatore del fuso orario è stato trovato, ma i dati del Registro di sistema sono danneggiati.

Esempio

Nell'esempio seguente viene utilizzato FindSystemTimeZoneById il metodo per recuperare il fuso orario standard di Tokyo. Questo oggetto viene quindi utilizzato per convertire l'ora locale nell'ora di Tokyo e per determinare se si tratta dell'ora solare Tokyo o dell'ora TimeZoneInfo legale Tokyo.

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
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

Commenti

Il parametro deve corrispondere esattamente all'identificatore del fuso orario in lunghezza, ma non nel caso in cui si verifichi una corrispondenza corretta. In altri casi, il confronto di con gli identificatori del fuso orario non fa distinzione tra maiuscole e id id minuscole. Se si desidera recuperare gli oggetti fuso orario in base a corrispondenze parziali, è possibile scrivere procedure personalizzate che funzionano con la raccolta di sola lettura di oggetti TimeZoneInfo restituita dal GetSystemTimeZones metodo .

Nei Windows, tenta di trovare una corrispondenza con i nomi delle sottochiavi FindSystemTimeZoneById del ramo HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Time Zones del Registro di id sistema. In Linux e macOS usa le informazioni sul fuso orario disponibili nella libreria ICU. Se il Registro di sistema o la libreria non dispone delle informazioni per il fuso orario desiderato, è possibile creare un particolare fuso orario chiamando uno degli overload del metodo o chiamando per deserializzare un oggetto che rappresenta il fuso orario CreateCustomTimeZone FromSerializedString TimeZoneInfo richiesto. Tuttavia, i fusi orari creati da queste chiamate al metodo non sono orari definiti dal sistema e non possono essere recuperati usando il FindSystemTimeZoneById metodo . È possibile accedere a questi fusi orari personalizzati solo tramite il riferimento all'oggetto restituito dalla CreateCustomTimeZone chiamata al metodo o FromSerializedString .

Questo metodo restituisce una nuova TimeZoneInfo istanza di per ogni chiamata al metodo e non restituisce oggetti memorizzati nella cache. Ciò può influire sulle prestazioni nelle applicazioni che chiamano FindSystemTimeZoneById ripetutamente il metodo con lo stesso identificatore.

Si applica a

Vedi anche