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

Due proprietà della classe TimeZoneInfo, Utc e Local, consentono di usare un codice di accesso per gli 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. Usare la proprietà static (Shared in Visual Basic) TimeZoneInfo.Utc per accedere a Coordinated Universal Time.

  2. Anziché assegnare l'oggetto TimeZoneInfo restituito dalla proprietà a una variabile oggetto, continuare ad accedere all'ora UTC usando la proprietà TimeZoneInfo.Utc.

Per accedere al fuso orario locale

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

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

Esempio

Nel codice seguente vengono utilizzate le proprietà TimeZoneInfo.Local e TimeZoneInfo.Utc per convertire un orario del fuso orario standard degli Stati Uniti e Canada orientale, nonché per visualizzare il nome del fuso orario nella console.

// 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 {timeZoneName} zone cannot be found in the registry.");
}
catch (InvalidTimeZoneException)
{
    Console.WriteLine("The registry contains invalid data for the {timeZoneName} zone.");
}

// The example produces the following output to the console:
//    At 1/1/2007 12:00:00 AM (UTC-05:00) Eastern Time (US & Canada), the local time is 1/1/2007 12:00:00 AM Eastern Standard Time.
//    At 1/1/2007 12:00:00 AM (UTC-05:00) Eastern Time (US & Canada), the time is 1/1/2007 5:00:00 AM UTC.

' 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

Accedere sempre al fuso orario locale usando la proprietà TimeZoneInfo.Local anziché assegnare il fuso orario locale a una variabile oggetto TimeZoneInfo. Analogamente, accedere sempre all'ora UTC usando la proprietà TimeZoneInfo.Utc anziché assegnare l'ora UTC a una variabile oggetto TimeZoneInfo. Ciò impedisce che la variabile oggetto TimeZoneInfo venga invalidata da una chiamata al metodo TimeZoneInfo.ClearCachedData.

Compilazione del codice

L'esempio presenta i requisiti seguenti:

  • Che lo spazio dei nomi System verrà importato con l'istruzione using (obbligatoria nel codice C#).

Vedi anche