共用方式為


HOW TO:存取預先定義的 UTC 和本機時區物件

更新:2007 年 11 月

TimeZoneInfo 類別提供兩個屬性,UtcLocal,提供您預先定義的時區物件之程式碼存取權。本主題討論如何存取這些屬性所傳回的 TimeZoneInfo 物件。

存取 Coordinated Universal Time (UTC) TimeZoneInfo 物件

  1. 使用 static (在 Visual Basic 中為 Shared) TimeZoneInfo.Utc 屬性存取 Coordinated Universal Time。

  2. 您應該繼續透過 TimeZoneInfo.Utc 屬性存取 Coordinated Universal Time,而不是將屬性所傳回的 TimeZoneInfo 物件指派給物件變數。

存取當地時區

  1. 使用 static (在 Visual Basic 中為 Shared) TimeZoneInfo.Local 屬性存取當地系統時區。

  2. 您應該繼續透過 TimeZoneInfo.Local 屬性存取當地時區,而不是將屬性所傳回的 TimeZoneInfo 物件指派給物件變數。

範例

下列程式碼使用 TimeZoneInfo.LocalTimeZoneInfo.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
// 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);
}

您應該透過 TimeZoneInfo.Local 屬性存取當地時區,而不是將當地時區指派給 TimeZoneInfo 物件變數。同樣的,您應該透過 TimeZoneInfo.Utc 屬性存取 Coordinated Universal Time,而不是將 UTC 時區指派給 TimeZoneInfo 物件變數。這麼做可以避免 TimeZoneInfo 物件變數因呼叫 TimeZoneInfo.ClearCachedData 方法而失效。

編譯程式碼

這個範例需要:

  • 將 System.Core.dll 的參考加入至專案中。

  • 以 using 陳述式 (C# 程式碼中的必要項) 匯入 System 命名空間。

請參閱

工作

HOW TO:具現化 TimeZoneInfo 物件

概念

尋找定義於本機系統的時區

其他資源

時間和時區