发现HUBDOG的葵花宝典中的一个“错误”(也许是我的误解)大家来看看(0分)

  • 主题发起人 主题发起人 xdf_hubei
  • 开始时间 开始时间
X

xdf_hubei

Unregistered / Unconfirmed
GUEST, unregistred user!
在HUBDOG写的《未经证实的葵花宝典》中的一个问题,系统相关--日期时间处理--改变操作系统日期
中,叙述如下:
日期函数Now()、Date()、Time()大家都用得多了,这些函数是读取系统日期时间的。可是遇到需要改变操作系统的时间时,他们就一点办法也没有,而Delphi4又没有提供相关的函数,所以只好求助于API函数SetSystemTime(SystemTime);无奈他要求的变量SystemTime太古怪了,属于TSystemTime,需要经过转换才可以得到,所以举例如下:
  1、定义变量
var SystemTime: TSystemTime;
  2、转换日期
DateTimeToSystemTime(StrToDatetime('1999-09-01 11:12:12' ),SystemTime);
  3、改变系统日期
SetSystemTime(SystemTime);
  到此系统日期已经改变,可是由于API函数SetSystemTime()本身存在的BUG,在你改变系统日期以后,等待一会,你会看到系统的日期是对的,可是时间却错了,并不是我们设定的11:12:12,这样的问题看来需要微软才能解决了
///////////////////////////////////////////
{ SetDate sets the current date in the operating system. Valid }
{ parameter ranges are: Year 1980-2099, Month 1-12 and Day }
{ 1-31. If the date is not valid, the function call is ignored. }
procedure SetDate(Year, Month, Day: Word); assembler;
......
经过试验,setsystemtime,此API函数是根据格林威治时间调整系统时间,而我们大家的计算机大多设定时区为北京时间,
当使用此API时,是根据前者调整系统时间,所以,调整后的系统时钟比预期的快了8个小时,而并不是象文中所说!
而同时,另一个api函数:setlocaltime则是根据本地时间调整,可以一点不差!
我的试验环境是:Client(win2k pro,中文)+Server(win2k server 中文)通过服务器的sqlserver获取系统时间,然后
设置客户端的系统时钟!欢迎大家讨论![:D]
 
没错,你对了。
 
对,如果计算机不在本初子午线附近,则应当使用SetLocalTime()来设置时间。
可以免去考虑时差的麻烦。
 
问个问题,如果我的服务器端没有安装SQL SERVER2000,能否直接从服务器端获取服务器的时间?[?][?]
 
可以
应该是用NetRemoteTOD这个api
 
The NetRemoteTOD function returns the time of day information from a specified server.
特殊的服务器?如何理解?
 
var Sys: TSystemTime;
其实修改日期之前调用GetSystemTime(sys),
sys.xxxx:=xxxxx;
在调用SetSystemTime不就好了,没那么复杂!
 
算了结了,没有分[:(]
 
后退
顶部