| 网站首页 | JAVA文章 | AppServers | Web开发 | 应用开发 | 资源下载 | 论坛
    想学好编程,学好外语很重要  [enadd  2006年12月25日]        
设为首页 加入收藏 联系站长
您现在的位置: 编程笔记网 >> 应用开发 >> vb >> 系统 >> 文章正文
利用[+]按钮和[-]按钮增大和减小日期            【字体:
利用[+]按钮和[-]按钮增大和减小日期
作者:未知    文章来源:-    点击数:    更新时间:2006-8-9

Visual Basic以其灵活易学的特点成为目前Windows开发的主要工具,可你想到没
有,当世纪钟声敲响之时,你的VB程序会怎样呢?

笔者研究的结果说明Visual Basic的2000年问题比较复杂,因版本而异。

为了考察Visual Basic的2000年问题,我编写了如下这段程序:  

Dim sDate As String

Dim vDate As Variant

sDate = "Jan 1 01"

vDate = CVDate(sDate)

Debug.Print "Now = " & Now

Debug.Print "sDate = " & Format$(sDate, "dd/mm/yyyy")

Debug.Print "vDate = " & Format$(vDate, "dd/mm/yyyy")

把这段程序在每个版本的Visual Basic运行两次,第一次运行系统时间采用本世
纪的时间1997年8月9日,另一次使用下世纪的时间2000年8月9日。完成整个测试
之后,我得出下面的结果。

在Visual Basic 3.0中,两次的结果如下:

Now=97/08/09 3:06:48 PM

sDate = 01/01/1901

vDate = 01/01/1901

Now = 2000/08/09 3:08:11 PM

sDate = 01/01/1901

vDate = 01/01/1901

从结果中我们可以看出,由于Visual Basic 3.0发行得比较早,当时2000年问题
还没有引起人们的注意,所以Visual Basic 3.0把任何年份都看成本世纪的。也
就是说,可能会出现这样的情况:你的程序在下世纪会突然使时光倒流100年。在
测试中,我还发现Format函数和Year函数返回的结果是一样的,这说明在Visual
Basic 3.0中只存在一种计算世纪的方法。Visual Basic 4.0中的情况比3.0版复
杂多了。首先看看16位版本。下面是测试的结果:

Now = 97/08/09 3:06:48 PM

sDate = 01/01/1901

vDate = 01/01/1901

Now = 2000/08/09 3:08:11 PM

sDate = 01/01/2001

vDate = 01/01/2001

Visual Basic 4.0的16位是根据当前系统日期来判断世纪的。当前年份为1997,
得到的日期为20世纪的,若当前年份为2000年,得到的日期为21世纪的。这也可
能会出现问题,当你在2000年处理1999年的帐目时,Visual Basic会认为那是20
99年的。

如果你使用的是Visual Basic4.0的32位版本,你可能得到与16位版本相同的结果
,也可能不同。这是因为Visual Basic 4.0的32位版本的日期函数(除DateSeria
l函数以外)是从OleAut32.dll得到世纪数据的。Visual Basic 4.0的32位版本自
身带的是2.10版本,它采用的方法同Visual Basic 4.0 的16位版本一样。而在V
isual Basic 4.0发行后,微软也意识到它处理世纪的方法不够合理,所以在随后
发行的2.20版和此后的版本中采用了新的方法。新方法认为如果年份的后两位在
30至99之间,则认为是20世纪,而若在00至29之间,就认为是21世纪。这可以比
较好地解决世纪末过渡时期的世纪问题,至于2030年怎么办,只能到时候再说了
。微软96年以后推出的软件中包括的OleAut32.dll都是采用此方法,这些软件包
括Internet Explorer 3.0、Windows NT 3.51 Service Pack 5、Windows NT 4.
0、Windows 95 OSR 2( 俗称Windows 96)、Office 97 和Visual Studio 97 等  
等。Visual Basic 5.0也采用此方法。如果你在VisualBasic4.0的32位版本中运
行前面的测试程序得到的结果同16位版本相同,说明你的OleAut32.dll是老版本
,否则为新版本。可见,Visual Basic 4.0的32位版本得到的结果取决于OleAut
32.dll的版本。需要说明的是,DateSerial函数不是从OleAut32.dll得到世纪数
据的,它在Visual Basic的16位和32位采用的方法是一样的。以上是Visual Bas
ic各个版本对世纪问题的处理方法。如果你的程序不会因此发生问题,可以照常
调用各日期函数。但如果会因此出问题,我建议采用自定义函数来确定世纪。比
如,我有一个程序认为80年至99年的日期都是本世纪,而00年至79年为下世纪。
可以编写如下的程序来返回四位年份。  

 

Sub MyYear( vDate As Variant) As String

Dim s As String

If Format$( vDate, "yy") < "80" Then

s = "20"

Else  

s = "19"

End If

MyYear = s + Format$( vDate, "yy")

End Sub

 

现在,你应该逐个审核你的程序,不要让它们在2000年元旦的节日里给你找麻烦

[1]

文章录入:enadd    责任编辑:enadd 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
  • 用VB编写DirectX7.0游戏(下…

  • 用VB编写DirectX7.0游戏(上…

  • 使用OLE DB和ADO调用返回记录…

  • 使用VB调用Oracle程序包内的…

  • VB中用ADO对象动态创建数据库…

  • fffff

  • 如何用MSComm Control传Bina…

  • MultiLink的WinSock Server程…

  • 用VB制作浏览器

  • 用VB编写网络寻呼机

  •   网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 管理登录 |