在VFP编程中,如何编写代码修改操作系统的日期和时间?
---------------------------------------------------------------
*方法一:在VFP中利用SetLocalTime函数调用设置系统日期或时间
SET DATE YMD
SET CENTURY ON
SET HOURS TO 24
*假定设置系统日期、时间为:2005,01,01
nDate=CTOD('2005/01/01')
oldtime=TIME() &&取当前时间,想修改时间,修改此项
*oldtime='17:17:00' &&取当前时间,想修改时间,修改此项
nHo=VAL(SUBSTR(oldtime,1,2)) &&取当前时间-时
nSe=VAL(SUBSTR(oldtime,4,2)) &&取当前时间-分
nMi=VAL(SUBSTR(oldtime,7,2))&&取当前时间-秒
nMM=VAL(RIGHT(oldtime,2))&&取当前时间-毫秒
cBuf=h2str(YEAR(nDate))+h2str(MONTH(nDate))+h2str(DOW(nDate)-1)+h2str(DAY(nDate))+h2str(nHo)+h2str(nSe)+h2str(nMi)+h2str(nMM)
*&&将转换后的二进制字符连接
DECLARE SHORT SetLocalTime IN win32api STRING SystemTime
SetLocalTime(cBuf) &&设置系统日期
CLEAR DLLS
RETURN
*====以下是将十进制转换为二进制的自定义函数
FUNCTION h2str
PARAMETERS Zhsz
PRIVATE Fhz
Fhz=CHR(Zhsz%256)+CHR(Zhsz/256)
RETURN Fhz
ENDFUNC
*方法二:利用DOS的内部命令DATE或TIME来改变系统日期或时间
RUN DATE [MM/DD/YY]
比如把系统日期改为2000年10月1日,则
RUN DATE 10/01/2000
如果您需用变量来改日期,则:
mDATE='10/01/2000'
RUN DATE &mDATE
或
!date yyyy.mm.dd &&- 修改日期
!time HH:MM:SS &&- 修改时间
同理,如果想改变时间则用DOS的内部命令TIME来达到。
类似的命令还有一些,您可自己一试。
需要说明的是,利用DOS的内部命令时,RUN或!命令后不能带“/N”,
会出现DOS窗口,解决方法是您可以建立一个批处理文件(*.bat),内容为上面命令行,
然后再建一个快捷方式,将快捷方式属性中的运行方式其设为最小化,使用时调用这个快
捷方式,就可以以最小化窗口来执行DOS的命令了 。
*方法三:与方法一类似
SET CENTURY ON
m.updtdate = {^2005/06/08}
m.updttime = "16:20:15.00"
setsystime(m.updtdate, m.updttime)
FUNCTION setsystime
PARAMETERS m.updtdate, m.updttime
DECLARE SHORT SetLocalTime IN win32api STRING SystemTime
DECLARE INTEGER SendMessage IN win32api INTEGER WindowHandle,INTEGER MESSAGE,STRING Param1,STRING Param2
#DEFINE HWND_BROADCAST 65535
#DEFINE WM_TIMECHANGE 30
m.SystemTime = word2str(YEAR(m.updtdate)) + ;
word2str(MONTH(m.updtdate)) + ;
word2str(DOW(m.updtdate) - 1) + ;
word2str(DAY(m.updtdate)) + ;
word2str(VAL(LEFT(m.updttime, 2))) + ;
word2str(VAL(SUBSTR(m.updttime, 4, 2))) + ;
word2str(VAL(SUBSTR(m.updttime, 7, 2))) + ;
word2str(VAL(RIGHT(m.updttime, 2)))
m.retval = SetLocalTime(m.SystemTime)
m.retval = SendMessage(HWND_BROADCAST, WM_TIMECHANGE, "", "")
ENDFUNC
FUNCTION word2str
PARAMETERS m.wordval
PRIVATE i, m.retstr
m.retstr = ""
FOR i = 8 TO 0 STEP -8
m.retstr = CHR(INT(m.wordval/(2^i))) + m.retstr
m.wordval = MOD(m.wordval, (2^i))
NEXT
RETURN m.retstr
ENDFUNC