如何取得真实日期? (100分)

  • 主题发起人 主题发起人 cooler168
  • 开始时间 开始时间
C

cooler168

Unregistered / Unconfirmed
GUEST, unregistred user!
请教各位高手:<br>我想在form中的StatusBar上显示系统日期,且不会随控制面板中的设置改变,我用下面的语句没有成功<br>decodedate(Date,year,month,day);<br>StatusBar1.Panels[2].Text:=format('%-4s',[inttostr(year)+'-'+inttostr(month)+'-'+inttostr(day)]);<br>请问如何实现?
 
问题在控制面板中改变时间cmos时间也改变了呀!
 
看不懂你的问题,Delphi的Now函数不就可以得到日期时间吗?何必要到CMOS中去读?<br>什么叫“不会随控制面板中的设置改变”?不知道是不是这个意思:<br>FormatDateTime('yyyy-mm-dd hh:mm:ss',Now)
 
CMOD中的日期就是控制面板中的日期!你从控制面板中改变日期后CMOS的日期也改了。<br>不信试试。
 
可以用GetTickCount 来获得 Windows 启动以来经过的时间,以毫秒为单位,<br>这样所得时间差是准确的。再以此时间差加上初始时间就可以得到你要的东东
 
呃,可能是我的问题不够明白,是这样的,我想取得启动应用程序时的真实日期,<br>如今天是4月4日就该得到2002-04-04这样的结果,而实际上我用now()或date()函数<br>得到的都是控制面板中的日期,如果在控制面板中改变的话,就得不到我想要的结果了,<br>我就是不知道怎样取得真实日期。如能实现,请附代码为荷!<br>
 
连上网络,从时间服务器上取
 
如楼上所说,在做数据库应用时,都是取数据库时间,不能取客户端时间。
 
如果是单机的话,我觉的是不太可行,就如楼上几位说的一样,控制面板中改变日期后CMOS的日期也就改了。<br>用这种办法不好控制,用户也可以在CMOS中更改时间来避开程序的校验,除非管理员设了CMOS口令,总之不方便。<br>如果是网络的话,如LeeChange所说,可以从时间服务器上取,我单位的C/S数据库中前台程序每次启动都要把本<br>地时间和服务器上的时间进行比较,不一致就不允许登录。<br>真要在单机上用的话,推荐另一个思路:程序禁止修改控制面板的日期时间,供参考。<br>
 
哦,对不起,“程序禁止修改控制面板的日期时间”的思路bubble兄早已提出。
 
就像楼上所说。<br>不过你可以这样,启动时GetSystemDirector()得到系统目录。<br>然后rename 里面的 timedate.cpl,这样就不能通过控制面板修改时间了。<br>结束时再改回去。<br>如果是sqlserver<br>那么SELECT GETDATE() AS time得到当前服务器时间。
 
lable1.caption:=datetostr(date);<br>lable2.captioon:=timetostr(time);
 
1.如果是C/S模式程序,在服务器上取时间.<br>2.如果是单机版程序,用程序来禁止控制面板修改系统时间.
 
to bubble:<br>&nbsp; &nbsp;但先改掉日期再进应用程序不就控制不了了吗?<br>to leechange and fuku<br>&nbsp; &nbsp;我这个系统是单机。<br>&nbsp; &nbsp;记得以前做Lotus 的时候它就能严格控制。在Lotus里面是这样实现的:<br>用now()函数取得当前日期时间,但在控制面板中改便日期时间的话,重启机器<br>(Delphi不需重启)就会改变,而用create()函数取得的日期时间无论你怎样<br>改变它取得的都是准确的日期时间,除非你将Domino服务器的日期也改掉。我想<br>Delphi也一定有办法实现我想要的功能,否则做出来的产品不是太脆弱了吗?<br>
 
仔细想了一下,也许真的没有办法实现我想要的功能,因为一台机器怎么可能知道真实<br>的日期时间呢,机器里面的数据都是人为设定的,有人想改还有改不掉的!<br>所以,谢谢各位的答案!虽然我没有得到想要的答案,但从中也得到不少启发!
 
&gt;&gt;而用create()函数取得的日期时间无论你怎样<br>&gt;&gt;改变它取得的都是准确的日期时间,除非你将Domino服务器的日期也改掉<br><br>这跟咱们取数据库服务器的时间道理不是一样的么?
 

Similar threads

后退
顶部