Delen via


Procedure: Een TimeZoneInfo-object verkrijgen

De meest voorkomende manier om een TimeZoneInfo object te verkrijgen, is door informatie over het object op te halen uit het register. Als u het object wilt verkrijgen, roept u de static methode (Shared in Visual Basic) TimeZoneInfo.FindSystemTimeZoneById aan die in het register wordt gezocht. Eventuele uitzonderingen verwerken die door de methode worden gegenereerd, met name de TimeZoneNotFoundException uitzonderingen die worden gegenereerd als de tijdzone niet is gedefinieerd in het register.

Notitie

Vanaf .NET 8 wordt TimeZoneInfo.FindSystemTimeZoneById een object in de cache TimeZoneInfo geretourneerd in plaats van een nieuw object te instantiƫren. Zie FindSystemTimeZoneById retourneert geen nieuw object voor meer informatie.

Opmerking

Met de volgende code wordt een TimeZoneInfo object opgehaald dat de Eastern Standard-tijdzone vertegenwoordigt en de Eastern Standard-tijd wordt weergegeven die overeenkomt met de lokale tijd.

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

De TimeZoneInfo.FindSystemTimeZoneById enkele parameter van de methode is de id van de tijdzone die u wilt ophalen, die overeenkomt met de eigenschap van TimeZoneInfo.Id het object. De tijdzone-id is een sleutelveld dat de tijdzone uniek identificeert. Hoewel de meeste sleutels relatief kort zijn, is de tijdzone-id relatief lang. In de meeste gevallen komt de waarde ervan overeen met de StandardName eigenschap van een TimeZoneInfo object, dat wordt gebruikt om de naam van de standaardtijd van de tijdzone op te geven. Er zijn echter uitzonderingen. De beste manier om ervoor te zorgen dat u een geldige id opgeeft, is door de tijdzones die beschikbaar zijn op uw systeem te inventariseren en de id's van de tijdzones te noteren die erop aanwezig zijn. Zie Instructies voor een afbeelding : Tijdzones opsommen die aanwezig zijn op een computer. Het artikel Zoeken naar de tijdzones die zijn gedefinieerd in een lokaal systeem bevat ook een lijst met geselecteerde tijdzone-id's.

Als de tijdzone wordt gevonden, retourneert de methode het TimeZoneInfo object. Als de tijdzone niet wordt gevonden, genereert de methode een TimeZoneNotFoundException. Als de tijdzone wordt gevonden maar de gegevens beschadigd of onvolledig zijn, genereert de methode een InvalidTimeZoneException.

Als uw toepassing afhankelijk is van een tijdzone die aanwezig moet zijn, moet u eerst de FindSystemTimeZoneById methode aanroepen om de tijdzonegegevens op te halen uit het register. Als de methodeaanroep mislukt, moet uw uitzonderingshandler een nieuw exemplaar van de tijdzone maken of opnieuw maken door een geserialiseerd TimeZoneInfo object te deserialiseren. Zie Procedure : Tijdzones herstellen vanuit een ingesloten resource voor een voorbeeld.

Zie ook