Udostępnij za pośrednictwem


Instrukcje: Uzyskiwanie dostępu do wstępnie zdefiniowanych obiektów lokalnej strefy czasowej i strefy czasowej UTC

Klasa TimeZoneInfo udostępnia dwie właściwości i UtcLocal, które zapewniają dostęp kodu do wstępnie zdefiniowanych obiektów strefy czasowej. W tym temacie omówiono sposób uzyskiwania dostępu do TimeZoneInfo obiektów zwracanych przez te właściwości.

Aby uzyskać dostęp do obiektu TimeZoneInfo czasu koordynowanego (UTC)

  1. static Użyj właściwości (Shared w Visual Basic), TimeZoneInfo.Utc aby uzyskać dostęp do uniwersalnego czasu koordynowanego.

  2. Zamiast przypisywać TimeZoneInfo obiekt zwrócony przez właściwość do zmiennej obiektu, kontynuuj dostęp do uniwersalnego TimeZoneInfo.Utc czasu koordynowanego za pośrednictwem właściwości .

Aby uzyskać dostęp do lokalnej strefy czasowej

  1. static Użyj właściwości (Shared w Visual Basic), TimeZoneInfo.Local aby uzyskać dostęp do lokalnej strefy czasowej systemu.

  2. Zamiast przypisywać TimeZoneInfo obiekt zwrócony przez właściwość do zmiennej obiektu, kontynuuj dostęp do lokalnej strefy czasowej za pośrednictwem TimeZoneInfo.Local właściwości .

Przykład

Poniższy kod używa TimeZoneInfo.Local właściwości i TimeZoneInfo.Utc , aby przekonwertować czas ze strefy czasowej USA i Canadian Eastern Standard, a także wyświetlić nazwę strefy czasowej do konsoli.

// 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

Zawsze należy uzyskiwać dostęp do lokalnej strefy czasowej za pośrednictwem TimeZoneInfo.Local właściwości, a nie przypisywać lokalnej strefy czasowej do zmiennej TimeZoneInfo obiektu. Podobnie należy zawsze uzyskiwać dostęp do uniwersalnego TimeZoneInfo.Utc czasu koordynowanego za pośrednictwem właściwości, a nie przypisywać strefy UTC do zmiennej TimeZoneInfo obiektu. Uniemożliwia to unieważnienie zmiennej TimeZoneInfo obiektu przez wywołanie TimeZoneInfo.ClearCachedData metody .

Zobacz też