線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2506
推到 Plurk!
推到 Facebook!

取得伺服器之日期與時間

尚未結案
chiuwenchen
一般會員


發表:5
回覆:4
積分:1
註冊:2002-10-18

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-04-21 13:41:18 IP:211.72.xxx.xxx 未訂閱
各位先進: 如何取得某一台伺服器之日期與時間
channel
尊榮會員


發表:67
回覆:707
積分:854
註冊:2002-05-02

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-04-21 14:43:43 IP:211.21.xxx.xxx 未訂閱
引言: 各位先進: 如何取得某一台伺服器之日期與時間
我有一個方法不知道是不是您要的,參考一下:
  • 假設您的伺服器上有裝MS SQL:
    function GetServerDate: TDateTime;
    var
      aqry: TQuery;
    begin
      aqry := TQuery.Create(nil);
      try
        aqry.DatabaseName := 'DB';
        aqry.Close;
        aqry.SQL.Clear;
        aqry.SQL.Add('Select GETDATE() DBDate');
        aqry.Open;
        Result := aqry.FieldByName('DBDate').AsDateTime;
      finally
        FreeAndNil(aqry);
      end;
    end;
    
  • 假設您的伺服器上有裝Oracle:
    function GetServerDate: TDateTime;
    var
      aqry: TQuery;
    begin
      aqry := TQuery.Create(nil);
      try
        aqry.DatabaseName := 'DB';
        aqry.Close;
        aqry.SQL.Clear;
        aqry.SQL.Add('Select SYSDATE DBDate From DUAL');
        aqry.Open;
        Result := aqry.FieldByName('DBDate').AsDateTime;
      finally
        FreeAndNil(aqry);
      end;
    end;
    
~小弟淺見,參考看看~ 發表人 - channel 於 2003/04/21 14:44:52
------
~小弟淺見,參考看看~
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-04-23 01:28:24 IP:61.221.xxx.xxx 未訂閱
若是 windows 的伺服器, 可以利用netapi32.dll下的NetRemoteTOD api 來取得 remote 電腦時間, 程式的範例如下: (若是無法取得連線, 是權限的問題, 記得要先 trust 過(利用 WNetAddConnection2 API), 參考相關文章: http://delphi.ktop.com.tw/topic.php?topic_id=22100    
type
   TIME_OF_DAY_INFO  = record  //api 傳回的資料格式
     tod_elapsedt     : DWord;
     tod_msecs        : DWord;
     tod_hours        : DWord;
     tod_mins         : DWord;
     tod_secs         : DWord;
     tod_hunds        : DWord;
     tod_timezone     : LongInt;
     tod_tinterval    : DWord;
     tod_day          : DWord;
     tod_month        : DWord;
     tod_year         : DWord;
     tod_weekday      : DWord;
   end;
   PTIME_OF_DAY_INFO = ^TIME_OF_DAY_INFO;
  
   LPBYTE           = ^Byte;
   NET_API_STATUS   = DWord;
//..
  function NetRemoteTOD(HostName: PWideChar; Buffer: LPBYTE): NET_API_STATUS;
   stdcall; external 'netapi32.dll' name 'NetRemoteTOD';  //宣告在 netapi32.dll 下的 NetRemoteTOD api
//..
function GetRemoteTOD(Host: WideString; TODInfo: LPBYTE): Boolean;
begin
  Result := (NetRemoteTOD(pWideChar(Host), TODInfo) = 0);
end;    function GetRemoteDateTime(Host: WideString): TDateTime;
var
  TOD   : PTIME_OF_DAY_INFO;
begin
  if NetRemoteTOD(pWideChar(Host), @TOD) = 0 then
   Result := EncodeDate(TOD^.tod_year, TOD^.tod_month, TOD^.tod_day) +
             EncodeTime(TOD^.tod_hours, TOD^.tod_mins, TOD^.tod_secs, TOD^.tod_hunds * 10) - TOD^.tod_timezone / 60 / 24
  else
   Result := 0;
end;
//
procedure TForm1.Button2Click(Sender: TObject);
var
  t: TDatetime;
begin
  t:=GetRemoteDateTime('\\192.168.6.101'); // 主機前要加 \\, 而且要先 trust 過
  showmessage(formatdatetime('yyyy/mm/dd hh:nn:ss',t));
end;
c905165
中階會員


發表:50
回覆:120
積分:54
註冊:2002-09-29

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-04-23 02:25:46 IP:211.75.xxx.xxx 未訂閱
承channel所言,如果是mysql,sql 語法要改成 "select current_date,current_time" 即可取得資料庫伺服器目前時間。(如果時區沒有設定錯誤,就不會有問題) 有困難就是能力不足,有麻煩就是方法不對... 劣者總是遇到困難,也時常出現麻煩
------
有困難就是能力不足,有麻煩就是方法不對... 劣者總是遇到困難,也時常出現麻煩
chiuwenchen
一般會員


發表:5
回覆:4
積分:1
註冊:2002-10-18

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-04-25 08:33:54 IP:211.72.xxx.xxx 未訂閱
引言: 若是 windows 的伺服器, 可以利用netapi32.dll下的NetRemoteTOD api 來取得 remote 電腦時間, 程式的範例如下: (若是無法取得連線, 是權限的問題, 記得要先 trust 過(利用 WNetAddConnection2 API), 參考相關文章: http://delphi.ktop.com.tw/topic.php?topic_id=22100
type
   TIME_OF_DAY_INFO  = record  //api 傳回的資料格式
     tod_elapsedt     : DWord;
     tod_msecs        : DWord;
     tod_hours        : DWord;
     tod_mins         : DWord;
     tod_secs         : DWord;
     tod_hunds        : DWord;
     tod_timezone     : LongInt;
     tod_tinterval    : DWord;
     tod_day          : DWord;
     tod_month        : DWord;
     tod_year         : DWord;
     tod_weekday      : DWord;
   end;
   PTIME_OF_DAY_INFO = ^TIME_OF_DAY_INFO;
  
   LPBYTE           = ^Byte;
   NET_API_STATUS   = DWord;
//..
  function NetRemoteTOD(HostName: PWideChar; Buffer: LPBYTE): NET_API_STATUS;
   stdcall; external 'netapi32.dll' name 'NetRemoteTOD';  //宣告在 netapi32.dll 下的 NetRemoteTOD api
//..
function GetRemoteTOD(Host: WideString; TODInfo: LPBYTE): Boolean;
begin
  Result := (NetRemoteTOD(pWideChar(Host), TODInfo) = 0);
end;    function GetRemoteDateTime(Host: WideString): TDateTime;
var
  TOD   : PTIME_OF_DAY_INFO;
begin
  if NetRemoteTOD(pWideChar(Host), @TOD) = 0 then
   Result := EncodeDate(TOD^.tod_year, TOD^.tod_month, TOD^.tod_day) +
             EncodeTime(TOD^.tod_hours, TOD^.tod_mins, TOD^.tod_secs, TOD^.tod_hunds * 10) - TOD^.tod_timezone / 60 / 24
  else
   Result := 0;
end;
//
procedure TForm1.Button2Click(Sender: TObject);
var
  t: TDatetime;
begin
  t:=GetRemoteDateTime('\\192.168.6.101'); // 主機前要加 \\, 而且要先 trust 過
  showmessage(formatdatetime('yyyy/mm/dd hh:nn:ss',t));
end;
O.K. 謝謝!!
系統時間:2024-05-05 23:44:06
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!