Hatena::Groupnadesiko

99円のへたれ学習帳

2008-09-11

SetLocalTimeを使ってHTTP時刻合わせクライアントを作る

| 21:37

あと2週ほどで日本語言語ワークショップです。生活にやっと一区切り付いたので、ろ作らないとまずい感じです・・・orz

いうことで、Win32APIの「SetLocalTime」を使って、HTTPでパソコンの時刻合わせをするクライアントを作ってみました。

http://msdn.microsoft.com/ja-jp/library/cc429941.aspx

●SetLocalTime({参照渡}lpSystemTime) =DLL("kernel32.dll","BOOL SetLocalTime(LPSYSTEMTIME lpSystemTime)")
●システム時刻設定(dateへ|dateに)
	stとは配列。SYSTEMTIMEとは変数。Iとは整数。
	date[0]を"/"で区切る
	st[0]=_[0];st[1]=_[1];st[3]=_[2]
	date[1]を":"で区切る
	st[4]=_[0];st[5]=_[1];st[6]=_[2]
	st[2]=0;st[7]=0
	SYSTEMTIMEに16を確保
	Iで0から7まで繰り返す
		INT(st[I])をSYSTEMTIMEの(I*2+1)に"WORD"でバイナリ設定
	SetLocalTime(SYSTEMTIME)
●UNIX2date(unix)
	tmpとは配列
	dayとは整数=unix/86400%86400
	unix=unix-day*86400
	tmp[0]=日付加算("1970/1/1","//{day}")
	tmp[1]="{ゼロ埋め(unix/3600%24,2)}:{ゼロ埋め(unix/60%60,2)}:{ゼロ埋め(unix%60,2)}"
	tmpで戻る

URL="http://ntp-a1.nict.go.jp/cgi-bin/ntp"
URLへHTTPゲット
それの"<BODY>{\10}"から"{\10}</BODY>"まで範囲切り取る
UNIX2date(それ-2208988800+60*60*9)
それへシステム時刻設定
おわり

「システム時刻設定」はSetLocalTimeのラッパーです。

サーバは、はNICTのものを指定しています。

http://www2.nict.go.jp/w/w114/tsp/PubNtp/clients.html

HTTPNTP時刻を得られます。(ヘッダのDateを使用しても良いのですが、少々解析が面倒です。)

TIPSを参考に、NTP時刻から2208988800秒を引いてUNIX時刻にします。このままではGMTなので、60*60*9を足してJSTに。時もシステムから取得すれば完璧ですが、とりあえず。

これを応用すれば本物の(S)NTPクライアントも作れるかもしれません。

MakendraMakendra 2011/11/24 17:13 It's wodnefurl to have you on our side, haha!

bumggmxkwaabumggmxkwaa 2011/11/24 21:31 iHMdgR <a href="http://jacxshrqrqkx.com/">jacxshrqrqkx</a>

emgtfdgemgtfdg 2011/11/28 22:28 OkYcRL , [url=http://aunogvgtkqhq.com/]aunogvgtkqhq[/url], [link=http://iwfpttqgfqbf.com/]iwfpttqgfqbf[/link], http://lyiluvpkudbp.com/

qdmvtfpeeuqdmvtfpeeu 2011/12/01 18:19 PC7Kxb <a href="http://kwjmhxjujyoc.com/">kwjmhxjujyoc</a>

edlewjrefedlewjref 2011/12/06 01:05 oz7xY5 , [url=http://tfgspffhkiud.com/]tfgspffhkiud[/url], [link=http://ntuwgaoxyose.com/]ntuwgaoxyose[/link], http://areomcjxdtrw.com/

ゲスト



トラックバック - http://nadesiko.g.hatena.ne.jp/kyuuzyuu9yen/20080911
リンク元