#freeze
[[.NET]]

これ、元のコードを掲載していたところがわからないのよね。一応、参考にしたサイトを書いておくわね。

あ、実際の時刻変更はしてないわ。それは『[[時刻合わせをするには?]]』をみてね。

参考にした元データと変更してあるのは以下の部分だけよ。

- NTPサーバを呼び出し時に指定するようにした。
- voidでなくDateTimeを返すようにしてみた。
-- エラー時には現在時刻をオウム返しする。(NULLの方がいい?)

        /// <summary>
        /// 強制時刻合わせを試みる。そして得られた時刻データを返す。
        /// </summary>
        /// <returns></returns>
        public static DateTime conNetTime(string servername,int port)
        {
            DateTime r = DateTime.Now;
            DateTime dtSave = r;
            try
            {
                // UDP生成
                System.Net.Sockets.UdpClient objSck;
                System.Net.IPEndPoint ipAny =
                    new System.Net.IPEndPoint(
                    System.Net.IPAddress.Any, 0);
                objSck = new System.Net.Sockets.UdpClient(ipAny);

                // UDP送信
                Byte[] sdat = new Byte[48];
                sdat[0] = 0xB;
                objSck.Send(sdat, sdat.GetLength(0),
                    servername, port);

                // UDP受信
                Byte[] rdat = objSck.Receive(ref ipAny);

                // 1900年1月1日からの経過時間(日時分秒)
                long lngAllS; // 1900年1月1日からの経過秒数
                long lngD;    // 日
                long lngH;    // 時
                long lngM;    // 分
                long lngS;    // 秒

                // 1900年1月1日からの経過秒数
                lngAllS = (long)(
                          rdat[40] * Math.Pow(2, (8 * 3)) +
                          rdat[41] * Math.Pow(2, (8 * 2)) +
                          rdat[42] * Math.Pow(2, (8 * 1)) +
                          rdat[43]);

                lngD = lngAllS / (24 * 60 * 60); // 日
                lngS = lngAllS % (24 * 60 * 60); // 残りの秒数
                lngH = lngS / (60 * 60);         // 時
                lngS = lngS % (60 * 60);         // 残りの秒数
                lngM = lngS / 60;                // 分
                lngS = lngS % 60;                // 秒

                // DateTime型への変換
                DateTime dtTime = new DateTime(1900, 1, 1);
                dtTime = dtTime.AddDays(lngD);
                dtTime = dtTime.AddHours(lngH);
                dtTime = dtTime.AddMinutes(lngM);
                dtTime = dtTime.AddSeconds(lngS);
                // グリニッジ標準時から日本時間への変更
                dtTime = dtTime.AddHours(9);
                r = dtTime;

                //
                SetNowDateTime(dtTime);
            }
            catch (Exception ee)
            {
                // とりあえず時刻をPC側のそれで書き戻しておく。
                r = dtSave;
            }
            // 現在の日時表示
            return (r);
        }


* 参考にしたサイト [#h5743fce]

ちょっと調べてみたら、すぐに先賢のサイトがひっかかったわ。本当に感謝します。

** C#のコード [#q71b9b63]

どこがオリジナルなのかしら。といってもやっている事がシンプルなので、そんなに違うコードにはなりえないのかもだけど。

- http://kchon.blog111.fc2.com/blog-entry-223.html : NTPの現在の日時取得(C#/VB.NET)/ヨーキー景吾の逃走
- http://homepage2.nifty.com/nonnon/SoftSample/CS.NET/SampleNtpDateTime.html : NTPサーバの現在日時をシステム時計に
設定するサンプル(C#.NET) /NonSoft

** 公開NTPサーバ情報 [#p9fde06f]

C#コードサンプルにあるサイトは今、とても重いの。2005年に福岡大学のNTPサーバが大量アクセスで大変な事になったけど、あの時に似てるかしら。~
だから、今回は別のところと探して、NICTの公開NTPサーバのお世話になる事にしたわ。

- http://www2.nict.go.jp/aeri/sts/tsp/PubNtp/ : 公開NTPサーバ情報/NICT

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS