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 Utc Local, 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)
static
Użyj właściwości (Shared
w Visual Basic), TimeZoneInfo.Utc aby uzyskać dostęp do uniwersalnego czasu koordynowanego.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
static
Użyj właściwości (Shared
w Visual Basic), TimeZoneInfo.Local aby uzyskać dostęp do lokalnej strefy czasowej systemu.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 .