Condividi tramite


TimeZoneInfo.FindSystemTimeZoneById(String) Metodo

Definizione

Restituisce un TimeZoneInfo oggetto 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

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 usato il metodo per recuperare il FindSystemTimeZoneById fuso orario standard di Tokyo. Questo TimeZoneInfo oggetto viene quindi usato per convertire l'ora locale nell'ora di Tokyo e per determinare se è l'ora legale o l'ora legale di 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
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

Commenti

Il id parametro deve corrispondere esattamente all'identificatore del fuso orario di lunghezza, ma non nel caso in cui si verifichi una corrispondenza corretta, ovvero il confronto tra id gli identificatori del fuso orario è insensibile. Se si desidera recuperare gli oggetti del fuso orario in base alle corrispondenze parziali, è possibile scrivere procedure personalizzate che funzionano con la raccolta di sola lettura di TimeZoneInfo oggetti restituiti dal GetSystemTimeZones metodo .

Nei sistemi FindSystemTimeZoneById Windows tenta di corrispondere id ai nomi delle sottochiave del ramo HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Time Zones del Registro di sistema. In Linux e macOS vengono usate 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 determinato fuso orario chiamando uno degli overload del CreateCustomTimeZone metodo o chiamando FromSerializedString per deserializzare un TimeZoneInfo oggetto che rappresenta il fuso orario richiesto. Tuttavia, i fusi orari creati da queste chiamate al metodo non sono definiti dal sistema e non possono essere recuperati usando il FindSystemTimeZoneById metodo . Questi fusi orari personalizzati possono essere accessibili solo tramite il riferimento all'oggetto restituito dalla chiamata al CreateCustomTimeZone metodo o FromSerializedString .

In .NET 7 e versioni precedenti, questo metodo restituisce una nuova TimeZoneInfo istanza per ogni chiamata al metodo. Ciò potrebbe influire sulle prestazioni nelle applicazioni che chiamano ripetutamente il FindSystemTimeZoneById metodo con lo stesso identificatore. In .NET 8 e versioni successive, questo metodo restituisce sempre un'istanza memorizzata TimeZoneInfo nella cache.

Si applica a

Vedi anche