用Delphi获取当前系统时间
[入库:2005年8月18日] [更新:2007年3月24日]
|
|
在开发应用程序时往往需要获取当前系统时间。尽管y2k似乎已经平安过去,但在我们新开发的应用程序中还是要谨慎处理“时间”问题。
在《融会贯通--delphi4.0实战技巧》(以下简称“该书”)第89页专门介绍了两种获取当前系统时间的方法,但这两种方法都存在不足或错误,以下就此进行讨论。
该书第一种方法是利用time()函数获得当前系统时间,返回结果是tdatetime结构类型的变量。例如:
procedure tform1.button2click(sender: tobject);
var
datetime:tdatetime;
begin
datetime:=time();
caption:=datetostr(datetime)+' '+timetostr(datetime);
end;
但不论何日期,其结果却都是99-12-30 xx:xx:xx, 显然日期出错了。通过分析delphi的帮助,time()用于返回正确的“时间--时分秒”即timetostr(datetime),而不应该用于返回“日期”。事实上,单独用于返回日期的系统函数是date。
那么有什么是既可返回正确的“时分秒”又可返回正确的“年月日”呢? 可以用now函数,例如:
procedure tform1.button1click(sender: tobject);
var
mytime: tdatetime;
begin
mytime:=now;
caption:=datetostr(mytime)+' '+timetostr(mytime);
//或直接用 caption := datetimetostr(now);
end;
用now返回的日期格式中年只有2位,即2000年显示为00, 这似乎不太令人满意. 此外now和time都只能获得精确到秒的时间,为了得到更精确的毫秒级时间,可以使用api函数getsystemtime,它对应的tsystemtime类型的定义为:
tsystemtime = record
wyear: word;
wmonth: word;
wdayofweek: word;
wday: word;
whour: word;
wminute: word;
wsecond: word;
wmilliseconds: word;
end;
显然,在程序逻辑中还能够方便地使用其结构成?时---各类时间值,因此使用函数getsystemtime具有很大优越性。但该书中该函数的用法是错误的,通过查阅windows sdk帮助可知,该函数原型为:
void getsystemtime(lpsystemtime lpst),参数指针lpst获取系统时间,因此可如以下程序段实现:
procedure tform1.button3click(sender: tobject);
var
systime: tsystemtime;
begin
getsystemtime(systime);
caption:=inttostr(systime.wyear)+' '+inttostr(systime.wmonth);
//if systime.wyear>2000 then
// ......在程序逻辑中利用获取的各类时间值
end;
综合以上讨论,获取当前系统时间利用函数getsystemtime比较方便而且灵活。 |
本文关键:Now,TSystemTime
本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)