从服务器上获得网络时间的几种方法

1. 用Net Time \\server
2. NT平台用Win32 API函数:NetRemoteTOD
3. 用文件的创建时间
在服务器的共享文件夹下创建新文件,取新文件的创建时间。
4. 用HTTP协议头,有服务器的时间
5. 使用Telnet,取返回值
Telnet Server 13
6. 使用数据库
a) Oracle: select sysdate from dual
b) Informix: select current() from systables
c) Sql Server: select getdate()
7. 使用DCOM Server
创建一个取得服务器时间的DCOM Server,在客户端调用

---------------------------------------------------------------

自动与Internet时间服务器同步

  Windows默认的二个Internet时间服务器:time.windows.com和time.nist.gov大家肯定经常用,反正在我这里是经常时间同步失败,大概因为服务器是国外的,同步的机器又多,服务器太忙了吧。
  
  下面这个IP是中国国家授时中心的Internet时间服务器地址,用它来代替time.windows.com和time.nist.gov服务器,同步时间快。同步成功的机会大大增加。

210.72.145.44
大家不妨试试。

中国国家授时中心:
http://www.ntsc.ac.cn/

---------------------------------------------------------------

取指定IP或服务器时间
//方法一:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TTODInfo = record
ElapsedTime: Integer; {number of seconds since 00:00:00 January 1, 1970}
Milliseconds: Integer; {number of milliseconds since last system reset}
Hours: Integer; {current hour (0-23)}
Minutes: Integer; {current minute (0-59)}
Seconds: Integer; {current second (0-59)}
Hunds: Integer; {current hundredth of a second (0-99)}
TimeZone: Integer; {time against GMT in minutes}
{west of Greenwich gives positive, east negative values}
{value of -1 means undefined time zone}
Interval: Integer; {clock tick interval in ten-thousandth of a second (0.0001 s)}
Day: Integer; {day of the month (1-31)}
Month: Integer; {month of the year (1-12)}
Year: Integer; {year}
Weekday: Integer; {day of the week (0-6) 0 = Sunday, 1 = Monday etc.}
end;
PTODInfo = ^TTODInfo;
type
TForm1 = class(TForm)
Label1: TLabel;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
const
netapi32 = ‘netapi32.dll‘;
function NetApiBufferFree(Buffer: Pointer): Integer; stdcall;
function NetRemoteTOD(UNCServerName: PWideChar; Info: Pointer): Integer; stdcall;
function ServerTime(const UNCServer: string; var Stamp: TDateTime): Integer;
implementation
{$R *.dfm}
function NetApiBufferFree; external netapi32 name ‘NetApiBufferFree‘;
function NetRemoteTOD; external netapi32 name ‘NetRemoteTOD‘;
function ServerTime(const UNCServer: string; var Stamp: TDateTime): Integer;
var
ServerName: PWideChar;
tod: PTODInfo;
Year, Month, Day, Hour, Min, Sec, MSec: Word;
begin
GetMem(ServerName, (Length(UNCServer) + 1) * SizeOf(WideChar));
try
ServerName := StringToWideChar(UNCServer, ServerName, Length(UNCServer) + 1);
Result := NetRemoteTOD(ServerName, @tod);
if Result = 0 then
begin
try
Year := tod^.Year;
Month := tod^.Month;
Day := tod^.Day;
Hour := tod^.Hours;
Min := tod^.Minutes;
Sec := tod^.Seconds;
MSec := tod^.Hunds * 10;
if tod^.TimeZone = -1 then {undefined timezone}
Stamp := EncodeDate(Year, Month, Day) +
EncodeTime(Hour, Min, Sec, MSec)
else
Stamp := EncodeDate(Year, Month, Day) +
EncodeTime(Hour, Min, Sec, MSec) - (tod^.TimeZone / 1440);
finally
NetApiBufferFree(tod);
end;
end;
finally
FreeMem(ServerName);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
t: TDateTime;
begin
ServerTime(‘192.168.192.187‘, t);
label1.Caption := DateTimeToStr(t);
end;
end.

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;
方法二:
假設您的伺服器上有裝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;

参考
http://hi.baidu.com/lobtao/item/843aaf0bd08b44803d42e278

时间: 2025-01-04 21:10:11

从服务器上获得网络时间的几种方法的相关文章

保留上次访问网站的时间的几种方法

这里保留上次访问网站的时间的三种方法.即用cookie\session\servletContext.其实这三种方法的思路都是一样的. 思路如下: 把你访问网站的时间作为在上述三个对象的属性值,然后再把上述三个对象的属性值给读出来.而这个属性值就是你访问网站时的时间. 下面的代码是这样写的:把三种方法的存放属性值放在一个方法中分别:注明了cookie方法.session方法.servletContext方法.而读取属性值用同样的方式放在了同一个类中. //存放属性(即存放时间的代码如下) 1 p

打开网络适配的两种方法

打开网络适配有两种方法 第一种是在Info.plist文件里添加XML代码 具体步骤:右击Info.plist文件 选择Open As里面的Source Code 然后在文件底部插入下面代码 [html] view plain copy <key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict> 第二种

服务器上传,时间超时极速赛车可控平台搭建如何设置保持连接

做好了项上,其中极速赛车可控平台搭建  Q848622369 包含有一个上传的功能.在开发环境和测试环境运行.测试都没什么问题.也许是由于本地的局域网的问题,一切都运行的比较快,但把它发布到外网的服务器上去时.就特别的慢.上传小的文件还算比较过得去.但是大的文件 ,只见request在请求,但就没有进度条在走.等了半天,最后死了.还报了一个郁闷的错: #org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploa

Microsoft Dynamics CRM 2011 面向Internet部署 (IFD) ADFS虚拟机环境搭建的步骤(CRM与ADFS装在同一台服务器上) 摘自网络

1: 安装windows server 2008 R2 中文版 (过程略) 安装完成后设置机器名和IP地址, 本过程机器名 crm5dev,192.168.0.110 dns: 192.168.0.110(本机) Administrator/[email protected] 2: 通过服务器管理器添加域服务,配置域服务器域名为crm5.lab. 注意:使用高级模式安装. 说明:服务器是windows server 2003 那么就选windows server 2003 服务器是windows

在Tomcat服务器上部署web应用程序常见的方法

一般在tomcat服务器上部署 java web应用程序有两种方式:静态和动态 一.静态部署 静态部署即在启动tomcat服务器之前部署好我们的web应用程序,只有当tomcat服务器启用后,我们的web应用程序才能被访问) 1.利用tomcat自动部署 将web应用程序拷贝到/usr/local/tomcat/webapps/下,然后重启tomcat服务器即可,此时由于配置文件配置了autoDeploy="true,tomcat启动此将自动加载该web应用 2.修改server.xml文件部署

点击下箭头??变上箭头??来回切换的两种方法

我所知道的常用的就这两种. 第一种:说明一下我用的是fontawesome字体,首先要去官网下载来用 <span class='btn btn-more'> <i class='fa fa-angle-down'></i> <i class='fa fa-angle-up hidden'></i></span> 我用的是bootstrap,所以hidden是自带的,上面的初始状态就是下箭头angle-down是显示的,然后上箭头ang

RHEL7.0 配置网络IP的三种方法

导读 RHEL7里面的网卡命名方式从eth0,1,2的方式变成了enoXXXXX的格式. en代表的是enthernet (以太网),o 代表的是onboard (内置),那一串数字是主板的某种索引编号自动生成,以便保证其唯一性.和原先的命名方式对比,这种新的方式比较长,难以记忆,不过优点在于编号唯一,做系统迁移的时候不容易出错. 1.修改/etc/sysconfig/network-scripts/eno16777736 查看你的网卡名称(本机是eno16777736): [[email pr

iOS获取网络类型的四种方法

Reachability类只能区分WIFI和WWAN类型,却无法区分2G网和3G网. 网上也有些方法,却都存在Bug. 经过网上查找资料和测试,基本上总结了以下几种方法: 1.使用导航栏的方式:(私有API) 代码: typedef enum { NetWorkType_None = 0, NetWorkType_WIFI, NetWorkType_2G, NetWorkType_3G, } NetWorkType; UIApplication *application = [UIApplica

在CentOS 7上安装Node.js的4种方法(yum安装和源码安装)

CentOS 7上的安装方法,其中涵盖了源码安装,已编译版本安装,EPEL(Extra Packages for Enterprise Linux)安装和通过NVM(Node version manager)安装这四种方法,其中,前两种方法基本上都是Linux通用的安装方式,特别是前者,其优点自然是可以安装最新的版本,至于后两者,因为安装简单且管理方便 源码安装 (非常推荐) 使用已编译版本安装 使用EPEL安装 使用NVM安装 一.源码安装 源码安装,下载是源码包,要进行编译和安装,编译过程,