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ではJST
やTokyo Standard Time
といったタイムゾーン名を、Linux等ではAsia/Tokyo
といった地域/都市名の表記を指定する必要があります。
システムで使用可能なすべてのタイムゾーンを取得するには、GetSystemTimeZonesメソッドを使います。