これ、元のコードを掲載していたところがわからないのよね。一応、参考にしたサイトを書いておくわね。
あ、実際の時刻変更はしてないわ。それは『時刻合わせをするには?』をみてね。
参考にした元データと変更してあるのは以下の部分だけよ。
/// <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); }
ちょっと調べてみたら、すぐに先賢のサイトがひっかかったわ。本当に感謝します。
どこがオリジナルなのかしら。といってもやっている事がシンプルなので、そんなに違うコードにはなりえないのかもだけど。
C#コードサンプルにあるサイトは今、とても重いの。2005年に福岡大学のNTPサーバが大量アクセスで大変な事になったけど、あの時に似てるかしら。
だから、今回は別のところと探して、NICTの公開NTPサーバのお世話になる事にしたわ。