2014年06月22日

C#で世界時計

   このエントリーをはてなブックマークに追加 Clip to Evernote
どう書く?orgに感謝を込めて」シリーズ その18

■問題 (出題者:sawatさん)
プログラムを実行した端末のロケールと、グリニッジ標準時と、ロサンゼルスの現在時刻を
それぞれ表示してください。 
時刻の表示はリアルタイムでなく、一回限りで構いません。 
時刻のフォーマットは自由とします。

出力例
現在の時刻は、2008年10月29日 11時36分21秒です。
グリニッジ標準時刻は、2008年10月29日 2時36分21秒です。
アメリカ・ロサンゼルスの時刻は、2008年10月28日 19時36分21秒です。

TimeZoneInfoクラスを使って実装。ついでに、TimeZoneInfoの他のプロパティを使った
コードも書いてみた。

■C#で書いたコード
using System;

namespace Doukaku.Org {
    static class Program {
        /// <summary>
        /// アプリケーションのメイン エントリ ポイントです。
        /// </summary>
        [STAThread]
        static void Main() {
            //現在のローカル時間を取得
            DateTime nowTime = DateTime.Parse("2008/10/29 11:36:21");
            Console.WriteLine("現在の時刻は、{0:yyyy年M月d日 H時m分s秒}です。", nowTime);

            //現地時間に対応する世界協定時刻の取得
            DateTime utc =
                System.TimeZoneInfo.ConvertTimeToUtc(nowTime, System.TimeZoneInfo.Local);
            Console.WriteLine("グリニッジ標準時刻は、{0:yyyy年M月d日 H時m分s秒}です。", utc);

            var tzi = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time");
            DateTime pst =
                System.TimeZoneInfo.ConvertTime(nowTime, tzi);
            Console.WriteLine("アメリカ・ロサンゼルスの時刻は、{0:yyyy年M月d日 H時m分s秒}です。", pst);

            // 問題の解答はここまで

            // 以下は、TimeZoneInfo の各プロパティを確認するコード

            //世界協定時刻(UTC: Coordinated Universal Time)オフセットの取得
            TimeSpan baseUtcOffset = System.TimeZoneInfo.Local.BaseUtcOffset;
            Console.WriteLine("BaseUtcOffset:{0}", baseUtcOffset);

            //現在の時間でのUTCオフセットの取得
            TimeSpan utcOffset = System.TimeZoneInfo.Local.GetUtcOffset(nowTime);
            Console.WriteLine("GetUtcOffset:{0}", utcOffset);

            //世界協定時刻に対応する現地時間の取得
            DateTime localTime =
                System.TimeZoneInfo.ConvertTimeFromUtc(utc, System.TimeZoneInfo.Local);
            Console.WriteLine("ToLocalTime:{0}", localTime);

            Console.ReadLine();
        }
    }
}


 

この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/gushwell/52373420