xinjie 发表于 2007-9-12 15:50

[分享][翻译]你未必知道的VFP中的秘密:解密类库和表单中的时间戳

<P>标题:Decoding the timestamp in class libararies and forms<BR>作者:Calvin_Hsia <BR>时间:Friday, January 21, 2005 11:55 AM <BR>翻译:<a href="http://trustqf.spaces.live.com" target="_blank" >xinjie<BR></A> <BR>    我曾经被问到这样一个问题: </P>
<P>    有什么方式可以将类库中的时间戳转换为可阅读的格式?  </P>
<P>  </P>
<P>    Visual Foxpro 在表(表单或类库)中的很多记录中放置了一个时间戳。这个字段本来是用于在不同的平台上进行记录的协调:DOS、Mac、Unix、Windows。 </P>
<P>  </P>
<P>    VFP 保留了一个变量 “_screen”作为一个表单实例的对象引用,它代表 VFP 的桌面。因为它是一个表单引用,所以你可以使用SaveAsClass 方法将其作为一个类来保存。 这样就会在下面的运行代码中导致产生一个时间戳字段。示例代码延迟3秒,创建一个表单的子类,并增加一个按钮,然后显示出类库中的时间戳字段。 </P>
<P>  </P>
<P>    时间戳显示为一个标准格式。 </P>
<P>  </P>
<P>ERASE t.vcx </P>
<P>_screen.AddObject("btn","commandbutton")  &amp;&amp; 在桌面增加一个按钮 </P>
<P>_screen.SaveAsClass("t.vcx","myform")           &amp;&amp; 创建目标文件 myform 类 </P>
<P>INKEY(3)                      &amp;&amp; 延迟3秒 </P>
<P>MODIFY CLASS xx OF t.vcx as myform FROM t.vcx nowait  &amp;&amp; 在同一类库中创建 myform 的子类 </P>
<P>ASELOBJ(aArray,1)                   &amp;&amp; 在设计器中得到类的对象引用 </P>
<P>aArray[1].addobject("btn2","commandbutton")     &amp;&amp; 在类中增加 btn2 </P>
<P>aArray[1].btn2.top=200                          &amp;&amp; 移动新增 btn2 使之可见 </P>
<P>KEYBOARD "Y"                                    &amp;&amp; 在“你想保存更改吗?”中按"y" </P>
<P>RELEASE WINDOWS "Class designer"    &amp;&amp; 关闭设计器 </P>
<P>USE t.vcx                     &amp;&amp; 打开表 </P>
<P>SCAN FOR timestamp!=0   &amp;&amp; 查找时间戳字段 </P>
<P>      ?timestamp,DecodeTimeStamp(timestamp),objname+" "+class </P>
<P>ENDSCAN </P>
<P>  </P>
<P>PROCEDURE DecodeTimeStamp(nTimestamp as Number) as Datetime &amp;&amp; see <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sysinfo/base/filetimetodosdatetime.asp" target="_blank" >http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sysinfo/base/filetimetodosdatetime.asp</A> </P>
<P>      nDate=BITRSHIFT(nTimestamp,16) </P>
<P>      nTime=BITAND(nTimestamp,2^16-1) </P>
<P>      </P>
<P>      nYear=BITAND(BITRSHIFT(nDate,9),2^8-1)+1980 </P>
<P>      nMonth=BITAND(BITRSHIFT(nDate,5),2^4-1) </P>
<P>      nDay=BITAND(nDate,2^5-1) </P>
<P>  </P>
<P>      nHr=BITAND(BITRSHIFT(nTime,11),2^5-1) </P>
<P>      nMin=BITAND(BITRSHIFT(nTime,5),2^6-1) </P>
<P>      nSec=BITAND(nTime,2^5-1) </P>
<P>  </P>
<P>      RETURN DATETIME(nYear,nMonth,nDay,nHr,nMin,nSec) </P>
<P>RETURN  <BR></P>

Tiger5392 发表于 2007-9-12 16:18

有xinjie的指引,减少多少成本。谢谢你,xinjie!

qingquan31 发表于 2007-9-12 16:21

<P>老大在这里啊,刚刚下载了你整理的网易VFP社区精华贴合集!正在拜读 ,谢谢你们这些辛苦的人了!!!</P>

zhou 发表于 2008-3-30 17:55

*** 作者被禁止或删除 内容自动屏蔽 ***

caohong 发表于 2008-6-16 17:30

谢谢老大

[tk05] 强力支持 向你们学习

页: [1]

编程论坛