Procedura: creare un'istanza di un oggetto TimeZoneInfoHow to: Instantiate a TimeZoneInfo object

Il modo più comune per creare un'istanza di un oggetto TimeZoneInfo è recuperare le relative informazioni dal Registro di sistema.The most common way to instantiate a TimeZoneInfo object is to retrieve information about it from the registry. In questo argomento viene illustrato come creare un'istanza di un oggetto TimeZoneInfo dal Registro di sistema locale.This topic discusses how to instantiate a TimeZoneInfo object from the local system registry.

Per creare un'istanza di un oggetto TimeZoneInfoTo instantiate a TimeZoneInfo object

  1. Dichiarare un oggetto TimeZoneInfo .Declare a TimeZoneInfo object.

  2. Chiamare il static (Shared in Visual Basic) TimeZoneInfo.FindSystemTimeZoneById metodo.Call the static (Shared in Visual Basic) TimeZoneInfo.FindSystemTimeZoneById method.

  3. Gestire tutte le eccezioni generate dal metodo, in particolare TimeZoneNotFoundException , generata se il fuso orario non è definito nel Registro di sistema.Handle any exceptions thrown by the method, particularly the TimeZoneNotFoundException that is thrown if the time zone is not defined in the registry.

EsempioExample

Nel codice seguente viene recuperato un oggetto TimeZoneInfo che rappresenta il fuso Ora solare fuso orientale e viene visualizzata l'Ora solare fuso orientale che corrisponde all'ora locale.The following code retrieves a TimeZoneInfo object that represents the Eastern Standard Time zone and displays the Eastern Standard time that corresponds to the local time.

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 unico parametro del metodo è l'identificatore del fuso orario che si desidera recuperare, che corrisponde all'oggetto TimeZoneInfo.Id proprietà.The TimeZoneInfo.FindSystemTimeZoneById method's single parameter is the identifier of the time zone that you want to retrieve, which corresponds to the object's TimeZoneInfo.Id property. L'identificatore del fuso orario è un campo chiave che identifica in modo univoco il fuso orario.The time zone identifier is a key field that uniquely identifies the time zone. Benché la maggior parte delle chiavi sia relativamente breve, in confronto l'identificatore del fuso orario è piuttosto lungo.While most keys are relatively short, the time zone identifier is comparatively long. In molti casi, il valore corrisponde alla proprietà StandardName di un oggetto TimeZoneInfo , usato per fornire il nome dell'ora solare del fuso orario.In most cases, its value corresponds to the StandardName property of a TimeZoneInfo object, which is used to provide the name of the time zone's standard time. Esistono tuttavia alcune eccezioni.However, there are exceptions. Il modo migliore per verificare che venga fornito un identificatore valido consiste nell'enumerare i fusi orari disponibili nel sistema e annotare i relativi identificatori dei fusi orari.The best way to make sure that you supply a valid identifier is to enumerate the time zones available on your system and note the identifiers of the time zones present on them. Per informazioni generali, vedere How to: Enumerate time zones present on a computer.For an illustration, see How to: Enumerate time zones present on a computer. Nell'argomento Finding the time zones defined on a local system è presente inoltre un elenco di identificatori dei fusi orari selezionati.The Finding the time zones defined on a local system topic also contains a list of selected time zone identifiers.

Se il fuso orario viene trovato, il metodo restituisce l'oggetto TimeZoneInfo .If the time zone is found, the method returns its TimeZoneInfo object. Se il fuso orario non viene trovato, il metodo genera un'eccezione TimeZoneNotFoundException.If the time zone is not found, the method throws a TimeZoneNotFoundException. Se invece il fuso orario viene trovato ma i dati sono danneggiati o incompleti, il metodo genera un'eccezione InvalidTimeZoneException.If the time zone is found but its data is corrupted or incomplete, the method throws an InvalidTimeZoneException.

Se l'applicazione si basa su un fuso orario che deve essere presente, chiamare prima il metodo FindSystemTimeZoneById per recuperare le informazioni del fuso orario dal Registro di sistema.If your application relies on a time zone that must be present, you should first call the FindSystemTimeZoneById method to retrieve the time zone information from the registry. Se la chiamata al metodo non riesce, il gestore di eccezioni deve creare una nuova istanza del fuso orario o deve ricrearlo deserializzando un oggetto TimeZoneInfo serializzato.If the method call fails, your exception handler should then either create a new instance of the time zone or re-create it by deserializing a serialized TimeZoneInfo object. Vedere procedura: ripristinare fusi orari da una risorsa incorporata per un esempio.See How to: Restore time zones from an embedded resource for an example.

Vedere ancheSee also

Date, ore e fusi orari ricerca dei fusi orari definiti in un sistema locale procedura: accedere a oggetti fuso UTC e l'ora locali predefinitiDates, times, and time zones Finding the time zones defined on a local system How to: Access the predefined UTC and local time zone objects