TimeZoneInfoクラスでは、タイムゾーンの名称(StandardNameプロパティ)、タイムゾーンにおける標準時とUTCとの差(オフセット値、BaseUtcOffsetプロパティ)、タイムゾーンに夏時間が存在するかどうか(SupportsDaylightSavingTimeプロパティ)、といった情報を参照することが出来ます。

次の例では、実行環境に設定されているタイムゾーンをLocalプロパティで取得し、その情報を表示しています。

ローカルタイムゾーン以外を表すTimeZoneInfoを取得したい場合は、FindSystemTimeZoneByIdメソッドに目的のタイムゾーンのIDを指定して取得します。 Windowsでは、レジストリに格納されている情報を元にTimeZoneInfoが取得されます。 FindSystemTimeZoneByIdメソッドでは、該当するタイムゾーンが見つからない場合、例外TimeZoneNotFoundExceptionがスローされます。

このほか、Localプロパティと同様、Utcプロパティを参照すれば、UTCのタイムゾーンを表すTimeZoneInfoを取得することが出来ます。

TimeZoneInfo.FindSystemTimeZoneByIdメソッドで特定のタイムゾーンに関する情報を取得する
using System;

class Sample {
  static void Main()
  {
    var timezones = new[] {
      TimeZoneInfo.Local,
      TimeZoneInfo.Utc,
    };

    foreach (var tz in timezones) {
      Console.WriteLine("{0} ({1}) {2}", tz.StandardName, tz.BaseUtcOffset, tz.DisplayName);
    }
    Console.WriteLine();

    // IDからTimeZoneInfoを取得
    var ids = new[] {
      "JST", "Tokyo Standard Time", "Asia/Tokyo",
      "EST", "Eastern Standard Time", "America/New_York",
      "GMT", "GMT Standard Time", "Europe/London",
    };

    foreach (var id in ids) {
      Console.Write("{0,-25} -> ", id);

      try {
        var tz = TimeZoneInfo.FindSystemTimeZoneById(id);

        Console.WriteLine("{0} ({1}) {2}", tz.StandardName, tz.BaseUtcOffset, tz.DisplayName);
      }
      catch (TimeZoneNotFoundException) {
        Console.WriteLine("(time zone not found)");
      }
    }
  }
}
タイムゾーンが「大阪、札幌、東京」での実行結果例
東京 (標準時) (09:00:00) (UTC+09:00) 大阪、札幌、東京
UTC (00:00:00) UTC

JST                       -> (time zone not found)
Tokyo Standard Time       -> 東京 (標準時) (09:00:00) (UTC+09:00) 大阪、札幌、東京
Asia/Tokyo                -> (time zone not found)
EST                       -> (time zone not found)
Eastern Standard Time     -> 東部標準時 (-05:00:00) (UTC-05:00) 東部標準時 (米国およびカナダ)
America/New_York          -> (time zone not found)
GMT                       -> (time zone not found)
GMT Standard Time         -> GMT 標準時 (00:00:00) (UTC+00:00) ダブリン、エジンバラ、リスボン、ロンドン
Europe/London             -> (time zone not found)
Asia/Tokyoでの実行結果例
日本標準時 (09:00:00) 日本標準時
UTC (00:00:00) UTC

JST                       -> (time zone not found)
Tokyo Standard Time       -> (time zone not found)
Asia/Tokyo                -> 日本標準時 (09:00:00) 日本標準時
EST                       -> GMT-05:00 (-05:00:00) GMT-05:00
Eastern Standard Time     -> (time zone not found)
America/New_York          -> アメリカ東部標準時 (-05:00:00) アメリカ東部標準時
GMT                       -> グリニッジ標準時 (00:00:00) グリニッジ標準時
GMT Standard Time         -> (time zone not found)
Europe/London             -> グリニッジ標準時 (00:00:00) グリニッジ標準時
Asia/Tokyoでの実行結果例
JST (09:00:00) JST
UTC (00:00:00) UTC

JST                       -> (time zone not found)
Tokyo Standard Time       -> (time zone not found)
Asia/Tokyo                -> JST (09:00:00) JST
EST                       -> EST (-05:00:00) EST
Eastern Standard Time     -> (time zone not found)
America/New_York          -> EST (-05:00:00) EST
GMT                       -> GMT (00:00:00) GMT
GMT Standard Time         -> (time zone not found)
Europe/London             -> GMT (00:00:00) GMT

FindSystemTimeZoneByIdメソッドでは、システムに保存されているタイムゾーン情報の形式の違いにより、WindowsではJSTTokyo Standard Timeといったタイムゾーン名を、Linux等ではAsia/Tokyoといった地域/都市名の表記を指定する必要があります。

システムで使用可能なすべてのタイムゾーンを取得するには、GetSystemTimeZonesメソッドを使います。

MENTAにてテキストチャットによるサポートを行っています。 問題の解決法をお探しの方や.NET/C#を学習中の方はどうぞご利用ください。