- ベストアンサー
サーバの時間の取得の仕方
1.WindowsNT4.0上のクライアント側からサーバのマシン時間(秒まで)取得をしたい。 2.あとクライアントの時刻も取得したい。 3.1.2.はc言語で行ったほうがいいのでしょうか? 具体的なコーディングがあればうれしいのですが・・。 宜しくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
サーバと時刻の同期を取りたいだけだったら、net コマンドでできますよ。 net time \\サーバ /set /yes ユーザは「システム時刻の変更」の権限を持っていなくてはいけません。 もし、サーバが NTP のサービスをしているのであれば、NTP クライアントの ソフトを導入することで可能です。Windows だったら有名所は「桜時計」で しょうか? # コーディングの話じゃなくて、申し訳ない
その他の回答 (1)
質問2についてVC++では以下の方法があるみたいです。 /* FTIME.C: このプログラムは、_ftime関数を使って、現在の時刻を求め、 * timebuffer に格納します。 */ #include <stdio.h> #include <sys\timeb.h> #include <time.h> void main( void ) { struct _timeb timebuffer; char *timeline; _ftime( &timebuffer ); timeline = ctime( & ( timebuffer.time ) ); printf( "現在の時刻は %.19s.%hu %s", timeline, timebuffer.millitm, &timeline[20] ); } 詳しくはヘルプを見てください。
補足
詳しい解答ありがとうございます。 調べた結果、下記のコーデングでもいいそうです。 #include <time.h> #include <stdio.h> void main( void ){ time_t ltime; time( <ime ); printf( "現在の時刻は %s\n", ctime( <ime ) ); } できれば次のことがしたい 1.クライアントとサーバの時刻の誤差を調べること 2.言語、方法は問わず(環境はWindousNT4.0のクライアントとサーバ) 3.誤差がある場合、時刻を合わせたい 宜しく、お願いします。
補足
桜時計があるなんてしりませんでした。あとClockSaver 1.5 日本語版で、NTPクライアントソフトや、GPS衛星の時刻電波などを利用でき時間のほせいができるそうです。すごですね。 丁寧にご解答いただきありがとうございます。 参考までに > 昨日連絡を頂きまして、WindowsAPIでサーバーの時刻を取得する処理について調査 > しました。 > まず、私がお答えできるのはサーバーが「WindowsNT」の場合に限ることを > 前提とさせて下さい。 > ====================================================== > ●クライアントOSが WindowsNT または Windows2000の場合 > ====================================================== > > 下記のプログラムでAPIが使用できます。 > 下記の宣言から呼び出し例までをVBに貼り付ければOKです。 > サンプルプログラムも作成いたしましたのでVB5なら > そのまま動作します。(実験済みです。) > > 【宣言】 > Declare Function NetRemoteTOD Lib "Netapi32.dll" _ > (UncServerName As Any, BufferPtr As Long) As Long > > Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _ > (hpvDest As Any, ByVal hpvSource As Long, ByVal cbCopy As Long) > > Type TIME_OF_DAY_INFO > tod_elapsedt As Long > tod_msecs As Long > tod_hours As Long > tod_mins As Long > tod_secs As Long > tod_hunds As Long > tod_timezone As Long > tod_tinterval As Long > tod_day As Long > tod_month As Long > tod_year As Long > tod_weekday As Long > End Type > > 【プロシージャ】 > Public Function GetServerDateTime(argServerName) As Date > Dim abytServerName() As Byte > Dim ptrTOD As Long > Dim stuTOD As TIME_OF_DAY_INFO > Dim ret As Long > > abytServerName = argServerName & vbNullChar > ret = NetRemoteTOD(abytServerName(0), ptrTOD) > If ret <> 0 Then > MsgBox "Server Not Found" > Exit Function > End If > > CopyMemory stuTOD, ptrTOD, Len(stuTOD) > GetServerDateTime = DateSerial(stuTOD.tod_year, stuTOD.tod_month, > stuTOD.tod_day) + _ > TimeSerial(stuTOD.tod_hours, stuTOD.tod_mins - stuTOD.tod_timezone, > stuTOD.tod_secs) > End Function > > 【呼び出し例】 > Dim dtSvDateTime As Date > dtSvDateTime = GetServerDateTime("サーバー名") > msgbox dtSvDateTime > > ====================================================== > ●クライアントOSが Windows95 または Windows98の場合 > ====================================================== > > APIは残念ながらわかりません。が時刻を取得するには下記の方法があります。 > > 1、MS-DOSコマンドで「NET TIME \\ServerName」と打つ > 2、「\\ServerNameの現在の時刻は 01/07/18 午前 11:06 です」 > と出力されます。(ServerNameは調べたいサーバー名です) > 3、出力結果の文字列を編集する > > > 以上です。