方法 : 定義済みの UTC オブジェクトおよびローカル タイム ゾーン オブジェクトにアクセスする

更新 : 2007 年 11 月

TimeZoneInfo クラスに用意されている 2 つのプロパティ、Utc および Local を使用すると、コードから定義済みのタイム ゾーン オブジェクトにアクセスできます。このトピックでは、これらのプロパティから返される TimeZoneInfo オブジェクトにアクセスする方法について説明します。

世界協定時刻 (UTC: Coordinated Universal Time) の TimeZoneInfo オブジェクトにアクセスするには

  1. static (Visual Basic では Shared) TimeZoneInfo.Utc プロパティを使用して、世界協定時刻にアクセスします。

  2. プロパティから返された TimeZoneInfo オブジェクトをオブジェクト変数に割り当てることはせず、そのまま TimeZoneInfo.Utc プロパティを使用して世界協定時刻にアクセスします。

ローカル タイム ゾーンにアクセスするには

  1. static (Visual Basic では Shared) TimeZoneInfo.Local プロパティを使用して、ローカル システム タイム ゾーンにアクセスします。

  2. プロパティから返された TimeZoneInfo オブジェクトをオブジェクト変数に割り当てることはせず、そのまま TimeZoneInfo.Local プロパティを使用してローカル タイム ゾーンにアクセスします。

使用例

次のコードでは、TimeZoneInfo.Local プロパティと TimeZoneInfo.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 オブジェクト変数にローカル タイム ゾーンを割り当てることはせず、必ず TimeZoneInfo.Local プロパティを使用してください。同様に、世界協定時刻にアクセスする場合は、UTC ゾーンを TimeZoneInfo オブジェクト変数に割り当てることはせず、必ず TimeZoneInfo.Utc プロパティを使用してください。これにより、TimeZoneInfo オブジェクト変数が TimeZoneInfo.ClearCachedData メソッド呼び出しによって無効になるのを防ぐことができます。

コードのコンパイル方法

この例で必要な要素は次のとおりです。

  • System.Core.dll への参照をプロジェクトに追加する。

  • System 名前空間を using ステートメントでインポートする (C# のコードで必要)。

参照

処理手順

方法 : TimeZoneInfo オブジェクトをインスタンス化する

概念

ローカル システムで定義されているタイム ゾーンの検索

その他の技術情報

時刻とタイム ゾーン