Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Il modo più comune per ottenere un TimeZoneInfo oggetto consiste nel recuperare informazioni su di esso dal Registro di sistema. Per ottenere l'oggetto, chiamare il static metodo (Shared in Visual Basic) TimeZoneInfo.FindSystemTimeZoneById che cerca nel Registro di sistema. Gestire eventuali eccezioni generate dal metodo , in particolare l'eccezione TimeZoneNotFoundException generata se il fuso orario non è definito nel Registro di sistema.
Annotazioni
A partire da .NET 8, TimeZoneInfo.FindSystemTimeZoneById restituisce un oggetto memorizzato TimeZoneInfo nella cache anziché creare un'istanza di un nuovo oggetto. Per altre informazioni, vedere FindSystemTimeZoneById non restituisce un nuovo oggetto.
Esempio
Il codice seguente recupera un TimeZoneInfo oggetto che rappresenta il fuso orario standard orientale e visualizza l'ora solare orientale corrispondente all'ora locale.
DateTime timeNow = DateTime.Now;
try
{
TimeZoneInfo easternZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
DateTime easternTimeNow = TimeZoneInfo.ConvertTime(
timeNow,
TimeZoneInfo.Local,
easternZone
);
Console.WriteLine("{0} {1} corresponds to {2} {3}.",
timeNow,
TimeZoneInfo.Local.IsDaylightSavingTime(timeNow) ?
TimeZoneInfo.Local.DaylightName :
TimeZoneInfo.Local.StandardName,
easternTimeNow,
easternZone.IsDaylightSavingTime(easternTimeNow) ?
easternZone.DaylightName :
easternZone.StandardName);
}
// Handle exception
//
// As an alternative to simply displaying an error message, an alternate Eastern
// Standard Time TimeZoneInfo object could be instantiated here either by restoring
// it from a serialized string or by providing the necessary data to the
// CreateCustomTimeZone method.
catch (TimeZoneNotFoundException)
{
Console.WriteLine("The Eastern Standard Time Zone cannot be found on the local system.");
}
catch (InvalidTimeZoneException)
{
Console.WriteLine("The Eastern Standard Time Zone contains invalid or missing data.");
}
catch (SecurityException)
{
Console.WriteLine("The application lacks permission to read time zone information from the registry.");
}
catch (OutOfMemoryException)
{
Console.WriteLine("Not enough memory is available to load information on the Eastern Standard Time zone.");
}
// If we weren't passing FindSystemTimeZoneById a literal string, we also
// would handle an ArgumentNullException.
Dim timeNow As Date = Date.Now
Try
Dim easternZone As TimeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time")
Dim easternTimeNow As Date = TimeZoneInfo.ConvertTime(timeNow, TimeZoneInfo.Local, easternZone)
Console.WriteLine("{0} {1} corresponds to {2} {3}.", _
timeNow, _
IIf(TimeZoneInfo.Local.IsDaylightSavingTime(timeNow), _
TimeZoneInfo.Local.DaylightName, TimeZoneInfo.Local.StandardName), _
easternTimeNow, _
IIf(easternZone.IsDaylightSavingTime(easternTimeNow), _
easternZone.DaylightName, easternZone.StandardName))
' Handle exception
'
' As an alternative to simply displaying an error message, an alternate Eastern
' Standard Time TimeZoneInfo object could be instantiated here either by restoring
' it from a serialized string or by providing the necessary data to the
' CreateCustomTimeZone method.
Catch e As TimeZoneNotFoundException
Console.WriteLine("The Eastern Standard Time Zone cannot be found on the local system.")
Catch e As InvalidTimeZoneException
Console.WriteLine("The Eastern Standard Time Zone contains invalid or missing data.")
Catch e As SecurityException
Console.WriteLine("The application lacks permission to read time zone information from the registry.")
Catch e As OutOfMemoryException
Console.WriteLine("Not enough memory is available to load information on the Eastern Standard Time zone.")
' If we weren't passing FindSystemTimeZoneById a literal string, we also
' would handle an ArgumentNullException.
End Try
Il TimeZoneInfo.FindSystemTimeZoneById singolo parametro del metodo è l'identificatore del fuso orario che si desidera recuperare, che corrisponde alla proprietà dell'oggetto TimeZoneInfo.Id . L'identificatore del fuso orario è un campo chiave che identifica in modo univoco il fuso orario. Anche se la maggior parte delle chiavi è relativamente breve, l'identificatore del fuso orario è relativamente lungo. Nella maggior parte dei casi, il relativo valore corrisponde alla StandardName proprietà di un TimeZoneInfo oggetto , che viene usato per specificare il nome dell'ora solare del fuso orario. Esistono tuttavia eccezioni. Il modo migliore per assicurarsi di fornire un identificatore valido consiste nell'enumerare i fusi orari disponibili nel sistema e prendere nota degli identificatori dei fusi orari presenti. Per un'illustrazione, vedere Procedura: Enumerare i fusi orari presenti in un computer. L'articolo Ricerca dei fusi orari definiti in un sistema locale contiene anche un elenco di identificatori di fuso orario selezionati.
Se viene trovato il fuso orario, il metodo restituisce il relativo TimeZoneInfo oggetto. Se il fuso orario non viene trovato, il metodo genera un'eccezione TimeZoneNotFoundException. Se il fuso orario viene trovato ma i relativi dati sono danneggiati o incompleti, il metodo genera un'eccezione InvalidTimeZoneException.
Se l'applicazione si basa su un fuso orario che deve essere presente, è necessario chiamare prima il FindSystemTimeZoneById metodo per recuperare le informazioni sul fuso orario dal Registro di sistema. Se la chiamata al metodo non riesce, il gestore eccezioni deve creare una nuova istanza del fuso orario o ricrearla deserializzando un oggetto serializzato TimeZoneInfo . Per un esempio , vedere Procedura: Ripristinare fusi orari da una risorsa incorporata .