たむらです。
これは、 slashdot.jp の日記に書いてたんだけどネタ提供のため及び続
きが未実装なため、こちらで広げようかと。
AdjustClock という Win32 なソフトウェアがある。
<URL:http://homepage1.nifty.com/redwing/software/software.html>
Delphi で作られたこのソフトは、<URL:http://www2.crl.go.jp/cgi-bin/JST.cgi>
から日本標準時間を取得して時刻合わせをしてくれるのだ。
普通こういう用途には、 ntp が使われるのだけど企業内で Proxy が ntp
通してくれないところでも、 HTTP は大丈夫なので結構便利そう。
# もっとも精度はかなり落ちると思われる。 README には 3 秒程度 ?と
で、 Unix は作者さんが知らないというので、 Ruby で実装してみること
にした。
まず時間の文字列取得は net/httpだね。ということで
require 'parsedate.rb'
require 'net/http'
$TARGET_ADDR = 'www2.crl.go.jp'
$TARGET_PATH = '/cgi-bin/JST.cgi'
$PROXY_ADDR = 'proxy.qrl.mei.co.jp'
$PROXY_PORT = 8080
$PROXY_ACCOUNT = ''
$PROXY_PASS = ''
$PROXY_AUTH = $PROXY_ACCOUNT.size == 0 ? nil :
['Proxy-Authorization' =>
sprintf("Basic %s",["#{proxy_account}:#{proxy_password}"]
.pack('m').strip) ]
proxy = Net::HTTP::Proxy($PROXY_ADDR, $PROXY_PORT)
proxy.start($TARGET_ADDR, 80 ) {|http|
response , = http.get($TARGET_PATH, $PROXY_AUTH)
response.body.split(/\n/).each do |l|
if /\s+Standard.+Date.parse\(\"(.+)\"/ === l then
# [2002, 1, 11, 21, 10, 41]
tt = ParseDate::parsedate($1)[0 .. 5]
p tt
p Time.gm(tt[0],tt[1],tt[2],tt[3],tt[4],tt[5]).to_i
break
end
end
}
あとは、OS依存な時刻設定部だ。
tDiary はじめました。 http://tamura.tdiary.net
たむら mailto:sgs02516@...