プログラミングでアイデアを具現化したい

あらゆるものを具現化するためにプログラミングを始めました。主にC#

C# TimeZoneInfoでサマータイムの判定を行う

アメリカについては3/13より既にサマータイムが始まっていますが
イギリス(GMT)は3/27にサマータイムが開始となります。

現在、OANDAよりFIXで受信した全TickデータをDBに書き込んでいるのですが
受信するタイムスタンプはUTC or GMTの為、書き込む際に日本時間に変換しています。

FIX仕様書を見る限り、たぶんUTCなのでサマータイム判定は必要ないかもしれないが
GMTだった場合、今のままではDBに1時間ズレたタイムスタンプでデータが
書き込まれてしまう為、サマータイムかどうか判定する必要がある。

準備の為調べたところ、TimeZoneInfoを使って簡単に取得できる事がわかった。
ということで、以下コードで色々情報とってみました。

using System;
namespace TimeZone {
    class Program {
        static void Main(string[] args) {
            //foreach(TimeZoneInfo TimeZone in TimeZoneInfo.GetSystemTimeZones()) {
            //    Console.WriteLine(TimeZone.Id);
            //}
            TimeZoneInfo localZone = TimeZoneInfo.Local;
            TimeZoneInfo nytZone = System.TimeZoneInfo.FindSystemTimeZoneById("Hawaiian Standard Time");
            TimeZoneInfo utcZone = TimeZoneInfo.Utc;


            Console.WriteLine("タイムゾーン{0}\n"
                                +((localZone.BaseUtcOffset >= TimeSpan.Zero) ? "+" : "-")
                                + "{1}時間{2}分\n",
                              localZone.DisplayName,
                              Math.Abs(localZone.BaseUtcOffset.Hours),
                              Math.Abs(localZone.BaseUtcOffset.Minutes)
                              );

            Console.WriteLine("タイムゾーン{0}\n"
                                + ((nytZone.BaseUtcOffset >= TimeSpan.Zero) ? "+" : "-")
                                + "{1}時間{2}分\n",
                              nytZone.DisplayName,
                              Math.Abs(nytZone.BaseUtcOffset.Hours),
                              Math.Abs(nytZone.BaseUtcOffset.Minutes)
                              );

            Console.WriteLine("タイムゾーン{0}\n"
                                + ((utcZone.BaseUtcOffset >= TimeSpan.Zero) ? "+" : "-")
                                + "{1}時間{2}分\n",
                              utcZone.DisplayName,
                              Math.Abs(utcZone.BaseUtcOffset.Hours),
                              Math.Abs(utcZone.BaseUtcOffset.Minutes)
                              );
        }
    }
}

出力結果
f:id:tos5511:20160326045734p:plain