時刻合わせ


やっほ〜  2012-09-02 16:44:55  No: 42839

おはようございます。
パソコンの時刻を一定期間ごとに正確に合わせたいのですが
どのようにすればよいのかわかりません。
過去の履歴でへりーなさんのご質問欄に回答があったので
その通りにコーディングしてみました。(下記)
function GetSNTPTime(Server: String): TDateTime;
begin
  with TIdSNTP.Create(Self) do
  try
    Port   := 123;
    Host   := Server;
    Result := DateTime;
    SyncTime;
  finally
    Free;
  end;
end;

procedure TfrmMenu.Button3Click(Sender: TObject);
begin
  Label6.Caption := FormatDateTime('YY/MM/DD HH:MM:SS',GetSNTPTime('clock.nc.fukuoka-u.ac.jp'));
end;

しかし、コンパイルすると以下のようなエラーが発生しました。
[エラー]未定義の識別子:'self'
なにか、他に必要なのでしょうか?


  2012-09-02 18:06:40  No: 42840

Delphi Selfというのを検索してみてください。
かなり基本的なキーワードです。

http://www.wwlnk.com/boheme/delphi/vbtodel/daf0930.html


igy  2012-09-02 18:45:53  No: 42841

>function GetSNTPTime(Server: String): TDateTime;

を TfrmMenu のメソッドにするのはいかがですか?

function TfrmMenu.GetSNTPTime(Server: String): TDateTime;

にして、下記のように宣言を追加。

  TForm1 = class(TForm)
    ・・・
  private
    { Private 宣言 }
    function GetSNTPTime(Server: String): TDateTime;     // ここに追加
    ・・・
  public
    { Public 宣言 }
    ・・・
  end;


やっほ〜  2012-09-03 21:53:56  No: 42842

igyさんResありがとうございます。
ご指示通りコーディングし実行したところ、
クッリクボタンを押下すると
以下のエラーが発生しました。
「プロジェクト TimeSyusei.exe がEIdSocketError クラス例外を生成しました。  'Socket Error #11004!'  
プロセスは停止しています。再開するにはステップ実行または実行を選択してください。」
まだ、どこかおかしいようです。


というか  2012-09-04 04:00:42  No: 42843

どこまでやったの?丸投げでは回答つかないんじゃない?


私も、ヘリーナさんを参考にしました。  2012-09-04 04:08:34  No: 42844

> 過去の履歴でへりーなさんのご質問欄に回答があったので
> その通りにコーディングしてみました。

「ヘリーナ」さんとこのスレを、最終行までよく読みましたか?。
私のとこでは問題なく機能していますよ。


やっほ〜  2012-09-05 01:35:21  No: 42845

というかさん、ご指摘ありがとうございます。
全く分からなかったのでついつい、楽をしちゃいました。
へりーなさんの質問欄は全て試したつもりなのですが、
「[エラー]未定義の識別子:'self'」
がでましたので、改めてご質問した次第です。
igyさんから教えていただいた通り
function TfrmMenu.GetSNTPTime(Server: String): TDateTime;
begin
  with TIdSNTP.Create(Self) do
  try
    Port   := 123;
    Host   := Server;
    Result := DateTime;
    SyncTime;
  finally
    Free;
  end;
end;

ボタンクリックイベントを
 Label6.Caption := FormatDateTime('YY/MM/DD HH:MM:SS',GetSNTPTime('clock.nc.fukuoka-u.ac.jp'));

とし実行したところ
'Socket Error #11004!'  のエラーが発生しました。
ネットでエラー内容で探していたのですが
今一、わかりませんでした。


Nov  2012-09-05 02:03:53  No: 42846

単純に、パケットが宛先に到達できない環境では(会社の火壁とか)?

ping か nslookupで確認願います。


やっほ〜  2012-09-06 07:27:23  No: 42847

NovさんResありがとうございます。
pingでもnslookup でも通信できませんでした。
当社のネット環境はproxyソフト経由です。
proxyでは出来ないのでしょうか?


Nov  2012-09-06 08:55:25  No: 42848

おそらくproxyソフトはntpを肩代わりしてくれないでしょう...

目的にもよりますが、すぐ思いつくのは次の3つです。
(1) 同じやり方で宛先を社内NTPサーバにする。
(2) HTTPで時刻を取得して、自前で設定する。
    NICT公開サーバのHTTPアクセス用URLでHTTPテキストをゲットし、
    SyncTimeのソースを参考にして時刻を設定する。
(3) OSに任せる(w32tm.exeなど)。

でも、(2)の場合、精度を確保するのは面倒くさそう。自分ではやりたくない部類のコーディングです。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加