#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