掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
インターネット上の時計で時刻を合わせるには? (ID:79629)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
自分の質問にはレスが着かない (><) 昔のコードから必要な部分だけ抜粋しました。エラールーチンやオブジェクトの説明省きますが、こんな感じでよろしいでしょうか? 当方はVB6でWinSockコントロール使いました。 ' ' 現在時間SMTPサーバーへ取得手続き ' Private Sub cmdGetTime_Click() '受信パケット格納変数 ' 参考:SNTPのメッセージ形式はほとんど決められてしまう ' http://www.geocities.co.jp/SiliconValley/6876/rfc2030j.htm 参照(2001-12現在) Dim bySendData(47) As Byte '問い合わせようの最初のデータを送信 bySendData(0) = &HB With wscSmtpSock .Close 'エラー対策で一度閉じる .Protocol = sckUDPProtocol 'UDPプロトコル .RemoteHost = txtServer.Text 'NTPサーバのアドレス。 .RemotePort = 123 'NTPはUDPでポート番号123を使用する .SendData (bySendData()) '受信要求データ送信(接続) End With End Sub ' ' SMTPサーバーから帰ってくる時間を取得 ' Private Sub wscSmtpSock_DataArrival(ByVal bytesTotal As Long) Dim byGetTime() As Byte 'SMTPサーバーから受信するデータ格納変数 Dim sVal As String Dim cuTimeStamp As Currency 'SMTPサーバーから返信されたデータの計算 '以下日付計算用変数 '算出する値に適合するのが通貨型のため、通貨型で宣言 Dim cuDays As Currency '現在の日にち格納変数 Dim cuHours As Currency '現在の時刻(何時か)の格納変数 Dim cuMinutes As Currency '現在の分の格納変数 Dim cuTempSecs As Currency '時間算出用テンポラリ変数 Dim dtTime As Date '受信したデータを格納 wscSmtpSock.GetData byGetTime() '世界協定時刻時間に変換する(40-43バイト目で判別する ms単位は無視) cuTimeStamp = CCur(byGetTime(40)) * 2 ^ (8 * 3) + CCur(byGetTime(41)) * 2 ^ (8 * 2) _ + CCur(byGetTime(42)) * 2 ^ 8 + CCur(byGetTime(43)) 'NTPサーバから取得した時刻を現地時間に変換 cuTimeStamp = cuTimeStamp - 2208988800@ cuDays@ = cuTimeStamp \ (24 * CLng(60 * 60)) '日付計算(24h×60m×60s) CLngはオーバーフロー対策 cuTempSecs@ = cuTimeStamp Mod (24 * CLng(60 * 60)) '日付計算からのあまり(つまり本日分経過した秒数) cuHours@ = cuTempSecs@ \ (60 * 60) '時間計算(60m×60s) cuTempSecs@ = cuTempSecs@ Mod (60 * 60) '時間計算からのあまり秒(つまり残りの分数以下) cuMinutes@ = cuTempSecs@ \ 60 '何分かの計算 cuTempSecs@ = cuTempSecs@ Mod 60 '残りが秒 '算出した結果を日付型変数に代入し、型変換する dtTime = CDate(DateAdd("d", cuDays, "1970/01/01") & " " & cuHours & ":" & cuMinutes & ":" & cuTempSecs) 'SNTPサーバーから取り出した時間を表示 txtTime.Text = Format(dtTime, "yyyy/mm/dd hh:nn:ss") '日本時間へ変更(グリニッジ天文台(イギリス)とは9時間の時差がある)、表示 dtTime = DateAdd("h", 9, dtTime) txtJapan.Text = Format(dtTime, "yyyy/mm/dd hh:nn:ss") '終了したのでソケットを閉じる。 Call wscSmtpSock.Close
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.