求时间服务器时间组织成NTP格式发送给客户端的代码.
解决方案 »
- delphi中如何使控件随窗口的放大和缩小动态改变自己的大小
- initialization (预设值) 出错要怎么解决?
- 各位,新年好!请教大家,我用服务器(sql数据库)+adoconnection+客户端应用程序(10个客户端),数据访问速度特别慢。如何解决此问题?
- 我加了{j-}为何const 还是可以改,这是一个菜鸟的提问
- 画面迁移的问题(简单问题,明天揭帖)
- 有没有远程窗体共享(类似于远程桌面,只能控一个程序的窗体)的控件?
- 如何取得小数点后的数值并与之验证之程式
- www.kingron.myetang.com的新网址是多少了?
- 关于clientdataset的问题。
- 请问怎么才能知道table是否处于可编辑状态呢??请指点一下呀~
- 有关ShellExecute
- TpageControl不能在FormCreate设置ActivePage
var
tz : TTimeZoneInformation;
begin
GetTimeZoneInformation(tz);
result := tz.Bias / 1440;
end;procedure dt2ntp(dt : tdatetime; var nsec, nfrac : longint);
var d, d1 : double;
begin
d := dt + tzbias - 2;
d := d * 86400;
d1 := d;
if d1 > maxint then
begin
d1 := d1 - maxint2;
end;
nsec := trunc(d1);
d1 := ((frac(d) * 1000) / 1000) * maxint2;
if d1 > maxint then
begin
d1 := d1 - maxint2;
end;
nfrac := trunc(d1);
end;
// 将NTP 时间戳(timestamp)格式转换成为DELPHI的 TDateTime 格式;
function ntp2dt(nsec, nfrac : longint) : tdatetime;
var
d, d1 : double;
begin
d := nsec;
if d < 0 then d := maxint2 + d - 1;
d1 := nfrac;
if d1 < 0 then d1 := maxint2 + d1 - 1;
d1 := d1 / maxint2;
d1 := trunc(d1 * 1000) / 1000;
result := (d + d1) / 86400;
result := result - tzbias + 2;
end;
//Ntp.将DELPHI的 TDateTime 格式转换成为 NTP 时间戳(timestamp)格式***************
//==============================================================================
procedure DateTimeToNtp(DateTime: TDateTime; var NtpSec, NtpFrac: LongInt);
var DateTime1, DateTime2: Double;
begin
DateTime1 := DateTime + GetTimeZoneBias - 2;
DateTime1 := DateTime1 * 86400;
DateTime2 := DateTime1;
if DateTime2>MaxInt then DateTime2 := DateTime2 - MAXUINT2;
NtpSec := Trunc(DateTime2);
DateTime2 := ((Frac(DateTime1) * 1000) / 1000) * MAXUINT2;
if DateTime2>MaxInt then DateTime2 := DateTime2 - MAXUINT2;
NtpFrac := Trunc(DateTime2);
end;//==============================================================================
//Ntp.将 NTP 时间戳(timestamp)格式转换成为DELPHI的 TDateTime 格式***************
//==============================================================================
function NtpToDateTime(const NtpSec, NtpFrac: LongInt): TDateTime;
var DateTime1, DateTime2: Double;
begin
DateTime1 := NtpSec;
if DateTime1<0 then DateTime1 := MAXUINT2 + DateTime1 - 1;
DateTime2 := NtpFrac;
if DateTime2<0 then DateTime2 := MAXUINT2 + DateTime2 - 1;
DateTime2 := DateTime2 / MAXUINT2;
DateTime2 := Trunc(DateTime2 * 1000) / 1000;
Result := (DateTime1 + DateTime2) / SecsPerDay;
Result := Result - GetTimeZoneBias + 2;
end;
格式为
'hh:nn:ss AM/PM m/dd/yyyy';谢谢楼上两位 结贴