OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

サーバの時間の取得の仕方

  • すぐに回答を!
  • 質問No.105564
  • 閲覧数1152
  • ありがとう数1
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 85% (107/125)

1.WindowsNT4.0上のクライアント側からサーバのマシン時間(秒まで)取得をしたい。
2.あとクライアントの時刻も取得したい。

3.1.2.はc言語で行ったほうがいいのでしょうか?

具体的なコーディングがあればうれしいのですが・・。
宜しくお願いします。
通報する
  • 回答数2
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.2
レベル14

ベストアンサー率 50% (1122/2211)

サーバと時刻の同期を取りたいだけだったら、net コマンドでできますよ。

net time \\サーバ /set /yes

ユーザは「システム時刻の変更」の権限を持っていなくてはいけません。

もし、サーバが NTP のサービスをしているのであれば、NTP クライアントの
ソフトを導入することで可能です。Windows だったら有名所は「桜時計」で
しょうか?

# コーディングの話じゃなくて、申し訳ない
補足コメント
phoo

お礼率 85% (107/125)

桜時計があるなんてしりませんでした。あと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、出力結果の文字列を編集する
>
>
> 以上です。
投稿日時 - 2001-07-18 13:14:48
-PR-
-PR-

その他の回答 (全1件)

  • 回答No.1

質問2についてVC++では以下の方法があるみたいです。 /* FTIME.C: このプログラムは、_ftime関数を使って、現在の時刻を求め、 * timebuffer に格納します。 */ #include <stdio.h> #include <sys\timeb.h> #include <time.h> void main( void ...続きを読む
質問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] );
}

詳しくはヘルプを見てください。
補足コメント
phoo

お礼率 85% (107/125)

詳しい解答ありがとうございます。
調べた結果、下記のコーデングでもいいそうです。

#include <time.h>
#include <stdio.h>
void main( void ){
time_t ltime;
time( &ltime );
printf( "現在の時刻は %s\n", ctime( &ltime ) );
}

できれば次のことがしたい
1.クライアントとサーバの時刻の誤差を調べること
2.言語、方法は問わず(環境はWindousNT4.0のクライアントとサーバ)
3.誤差がある場合、時刻を合わせたい

宜しく、お願いします。
投稿日時 - 2001-07-17 17:45:56


このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ