Condividi tramite


Procedura: accedere agli oggetti predefiniti dell'ora UTC e del fuso orario locale

La classe TimeZoneInfo fornisce due proprietà, Utc e Local, che forniscono il codice di accesso agli oggetti predefiniti del fuso orario. In questo argomento viene illustrato come accedere agli oggetti TimeZoneInfo restituiti da tali proprietà.

Per accedere all'oggetto TimeZoneInfo dell'ora UTC (Coordinated Universal Time)

  1. Utilizzare la proprietà static (Shared in Visual Basic) TimeZoneInfo.Utc per accedere all'ora UTC (Coordinated Universal Time).

  2. Anziché assegnare l'oggetto TimeZoneInfo restituito dalla proprietà a una variabile oggetto, continuare ad accedere all'ora UTC (Coordinated Universal Time) tramite la proprietà TimeZoneInfo.Utc.

Per accedere al fuso orario locale

  1. Utilizzare la proprietà static (Shared in Visual Basic) TimeZoneInfo.Local per accedere al fuso orario locale del sistema.

  2. Anziché assegnare l'oggetto TimeZoneInfo restituito dalla proprietà a una variabile oggetto, continuare ad accedere al fuso orario locale tramite la proprietà TimeZoneInfo.Local.

Esempio

Nel codice seguente vengono utilizzate le proprietà TimeZoneInfo.Local e TimeZoneInfo.Utc per convertire un orario dal fuso Ora solare USA e Canada orientale e visualizzare il nome del fuso orario nella console.

' Create Eastern Standard Time value and TimeZoneInfo object      
Dim estTime As Date = #01/01/2007 00:00:00#
Dim timeZoneName As String = "Eastern Standard Time"
Try
   Dim est As TimeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById(timeZoneName)

   ' Convert EST to local time
   Dim localTime As Date = TimeZoneInfo.ConvertTime(estTime, est, TimeZoneInfo.Local)
   Console.WriteLine("At {0} {1}, the local time is {2} {3}.", _
           estTime, _
           est, _
           localTime, _
           IIf(TimeZoneInfo.Local.IsDaylightSavingTime(localTime), _
               TimeZoneInfo.Local.DaylightName, _
               TimeZoneInfo.Local.StandardName))

   ' Convert EST to UTC
   Dim utcTime As Date = TimeZoneInfo.ConvertTime(estTime, est, TimeZoneInfo.Utc)
   Console.WriteLine("At {0} {1}, the time is {2} {3}.", _
           estTime, _
           est, _
           utcTime, _
           TimeZoneInfo.Utc.StandardName)
Catch e As TimeZoneNotFoundException
   Console.WriteLine("The {0} zone cannot be found in the registry.", _
                     timeZoneName)
Catch e As InvalidTimeZoneException
   Console.WriteLine("The registry contains invalid data for the {0} zone.", _
                     timeZoneName)
End Try
// Create Eastern Standard Time value and TimeZoneInfo object      
DateTime estTime = new DateTime(2007, 1, 1, 00, 00, 00);
string timeZoneName = "Eastern Standard Time";
try
{
   TimeZoneInfo est = TimeZoneInfo.FindSystemTimeZoneById(timeZoneName);

   // Convert EST to local time
   DateTime localTime = TimeZoneInfo.ConvertTime(estTime, est, TimeZoneInfo.Local);
   Console.WriteLine("At {0} {1}, the local time is {2} {3}.", 
           estTime, 
           est, 
           localTime, 
           TimeZoneInfo.Local.IsDaylightSavingTime(localTime) ?
                     TimeZoneInfo.Local.DaylightName : 
                     TimeZoneInfo.Local.StandardName);

   // Convert EST to UTC
   DateTime utcTime = TimeZoneInfo.ConvertTime(estTime, est, TimeZoneInfo.Utc);
   Console.WriteLine("At {0} {1}, the time is {2} {3}.", 
           estTime, 
           est, 
           utcTime, 
           TimeZoneInfo.Utc.StandardName);
}
catch (TimeZoneNotFoundException)
{
   Console.WriteLine("The {0} zone cannot be found in the registry.", 
                     timeZoneName);
}
catch (InvalidTimeZoneException)
{
   Console.WriteLine("The registry contains invalid data for the {0} zone.", 
                     timeZoneName);
}

È necessario accedere sempre al fuso orario locale tramite la proprietà TimeZoneInfo.Local anziché assegnare il fuso orario locale a una variabile oggetto TimeZoneInfo. Analogamente, è necessario accedere sempre all'ora UTC (Coordinated Universal Time) tramite la proprietà TimeZoneInfo.Utc anziché assegnare il fuso UTC a una variabile oggetto TimeZoneInfo. In questo modo si evita che la variabile oggetto TimeZoneInfo venga invalidata da una chiamata al metodo TimeZoneInfo.ClearCachedData.

Compilazione del codice

Per questo esempio è necessario:

  • Aggiungere un riferimento a System.Core.dll al progetto.

  • Importare lo spazio dei nomi System con l'istruzione using (richiesto nel codice C#).

Vedere anche

Attività

Procedura: creare un'istanza di un oggetto TimeZoneInfo

Concetti

Ricerca dei fusi orari definiti in un sistema locale

Altre risorse

Date, ora e fusi orari