[返回]
中国计算机报1999年第71期
在MIS系统中再改系统时间一法
小 狐
笔者在用VFP设计一个“供电营业管理系统”中时,经常要更改系统日期时间以符合各种单据的打印需要,要完成这个功能,虽然可以从控制面板中完成,但灵活性不足,也不足以显示一个MIS系统的交互操作功能。由于VFP中并未提供类似的更改系统日期时间的命令及函数,因此,要完成这样的功能,我们可以求助于Win32
API函数。
Win32 API库中的函数SetLocalTime()是用来设置当前地方时间,通过DECLARE-DLL命令可以在VFP中调用,其调用格式为:
DECLARE SHORT SetLocalTime IN win32api STRING SystemTime
可以通过更改参数SystemTime的值来设置新的日期时间,更改SystemTime的值后,其数据返回Win
95/98控制面板中的“日期/时间”设置项。SystemTime的组成可包括以下的部分:年份、月份、星期、日、时间等。因此我们可以根据以下的公式来返回新的日期时间,即:
SystemTime=年+月+星期+日+时+分+秒
转换成实际的公式可以为:
SystemTime = YEAR(updtdate) +MONTH(updtdate) + DOW(updtdate) + DAY(updtdate))+
VAL(LEFT(updtime, 2) + VAL(SUBSTR(updtime, 4, 2) + VAL(SUBSTR(updtime, 7, 2) +
VAL(RIGHT(updtime, 2))
在上述的转换公式中,updtdate及updtime这两个参数是需要用户提供的日期及时间,例如,我们可以设置updtdate及updtime为以下的初值:
updtdate={01/02/99}
updtime=″12:30:26.33″
用户可以将上述的代码做成一个函数,并另建一表单或程序,用来传递参数updtdate及updtime。
笔者建立了一个转换函数名为:setsystime,调用格式为:
= setsystime(updtdate,updtime)
此函数的完整代码如下:
FUNCTION setsystime
PARAMETERS updtdate,updtime
DECLARE SHORT SetLocalTime IN win32api STRING SystemTime
SystemTime = word2str(YEAR(updtdate)) + ;
word2str(MONTH(updtdate)) + ;
word2str(DOW(updtdate) -1) +;
word2str(DAY(updtdate))+ ;
word2str(VAL(LEFT(updtime, 2)))+;
word2str(VAL(SUBSTR(updtime, 4, 2))) + ;
word2str(VAL(SUBSTR(updtime, 7, 2))) + ;
word2str(VAL(RIGHT(updtime, 2)))
retval = SetLocalTime(SystemTime)
FUNCTION word2str
PARAMETERS wordval
PRIVATE i, retstr
retstr = ″ ″
FOR i = 8 TO 0 STEP -8
retstr = CHR(INT(wordval/(2^i))) + retstr
wordval = MOD(wordval, (2^i))
NEXT
RETURN retstr
要补充说明的是,上述代码使用了另一个函数word2str,此函数用来将所需要的日期时间参数转换成从低位及高低来显示。在实际应用中,读者可根据需要建立一接受输入更改日期及时间的表单,让用户从表单中输入新的日期、时间值,并把所输入的日期、时间存为一变量。例如分别存为newdate及newtime,再调用=
setsystime(newdate,newtime)来转换成新的日期、时间。
笔者利用上述的代码及原理建立了一交互更改系统日期时间的实用小程序,读者若有兴趣,可以从本人的主页中下载(
http://dlhome.yeah.net )。