アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

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

具体的なコーディングがあればうれしいのですが・・。
宜しくお願いします。

A 回答 (2件)

質問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( &ltime );
printf( "現在の時刻は %s\n", ctime( &ltime ) );
}

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

宜しく、お願いします。

補足日時:2001/07/17 17:45
    • good
    • 0

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



net time \\サーバ /set /yes

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

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

# コーディングの話じゃなくて、申し訳ない

この回答への補足

桜時計があるなんてしりませんでした。あと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
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!