VF下怎么修改客户日期时间

kebiyadang 2009-11-26 10:06:23
在VF开发的系统下,如何把服务器的时间更改到客户日期时间,也就是要求客户端与服务器时间同步。
...全文
373 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
taohua300 2009-11-26
  • 打赏
  • 举报
回复
参考 :
http://www.meizvfp.com/bbs/dispbbs.asp?BoardID=2&ID=83600
十豆三 2009-11-26
  • 打赏
  • 举报
回复
读取服务器时间不用说了,取数据库时间即可。

帖一下取得服务器时间后,更改本地时间吧:

如何通过代码设置系统日期或时间?

*----------------------------------------

*方法一:在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
Set Date YMD
Set Hours To 24
m.ltDateTime={^2009/01/01 00:00:00} &&要设置的日期时间
m.updtdate = Ttod(m.ltDateTime)
m.updttime = Ttoc(m.ltDateTime,2)
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


*方法四:对方法二的改进(dkfdtf)
NT 以上系统需要先用 AdjustTokenPrivileges 函数给进程赋 SE_SYSTEMTIME_NAME 权限

如果对这些 api 的使用不熟悉,用 WinExec 等高级些的 api 也可以:
Declare Long WinExec In WIN32API String, Long
WinExec('cmd /c date 2009/06/05',0) &&设置系统日期
WinExec('cmd /c time 09:00:00',0) &&设置系统时间
不过上面这个仍是使用 date 操作系统内部命令来修改日期的,与 run | ! 命令使用的是相似的方法,唯一不同的是它不显示那个黑色的 dos 窗口。但也因此需要根据不同的操作系统使用不同的命令,例如,win9x/me 中就需要将 cmd 改为 command
如:
m.ltDateTime={^2009/01/01 00:00:00} &&要设置的日期时间
Declare Long WinExec In WIN32API String, Long
WinExec('cmd /c date '+Dtoc(Ttod(m.ltDateTime)),0) &&设置系统日期
WinExec('cmd /c time '+Ttoc(m.ltDateTime,2),0) &&设置系统时间

2,749

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧