如何为 2000 年准备 Visual Basic 应用程序

文章翻译 文章翻译
文章编号: 162718 - 查看本文应用于的产品
本文已归档。它按“原样”提供,并且不再更新。
展开全部 | 关闭全部

本文内容

概要

作为一名开发人员,您可能担心您的应用程序将如何处理超过 12/31/1999年的日期。上一月 1 日的 2000 年,将您的程序认为它是 2000年、 1900,或偶数 1980 年吗?本文的目标是确保您 Visual Basic 应用程序将具有日期超出了 12/31/1999年的正确行为。

更多信息

虽然所有版本的 Visual Basic 将都处理大于 (以四位数字格式) 1999 年,传递一个两位数的年份 (例如,7/3/45) 日期中强制 Visual Basic 采用何种世纪日期对应于。可能是最好的方法来解释此行为是为提供快速的 Visual Basic 历史课。

Visual Basic 历史课

对于所有版本的 Visual Basic 的 Windows (DOS 和 QuickBasic 包括其前置任务,如 Visual Basic) 之前并包括 3.0,两位数字的年份是始终假定使用的是该 1900s年。代码以实现此默认值已内置到每个版本的运行时库,并不依赖操作系统的版本或当前系统日期的世纪。

在开发周期中的 Visual Basic 3.0 和 4.0,之间产生两个新实体: Visual Basic 应用程序和 OLE 自动化。之前这些技术的出现,Visual Basic 运行时库包含负责将两位数年份转换为四位数年份的代码。OLE 自动化公开了大量的其他应用程序可以访问的功能。要实现此代码不需要为应用程序的 Visual Basic ; 它而是会使 OLE 自动化库的调用。

Visual Basic 4.0 开发的与记住此互操作性,并且依赖于 OLE 自动化库,若要将两位数年份转换为四位数字的年份,在大多数情况下开始。规则例外情况是因为 Visual Basic 所需的更多的功能比 OLE 自动化库可能提供在那时,Visual Basic 运行时库中已实现的 DateSerial 函数。

在 Visual Basic 4.0 的开发周期的过程中 Microsoft 决定在早期版本的 Visual Basic 中使用该默认值是可靠,但不是一定是实际。因此,等出现一个新规则。一个两位数的年份将会被转换为当前系统日期的世纪。因此,Year(Date("1/1/00")) 将计算结果为当前纪元。在 Visual Basic 4.0 和使用 vba 的应用程序的 OLE 自动化库中实施了此新规则。Visual Basic 4.0 运行时库还实现 DateSerial 函数的规则。

Microsoft 以后 reconsidered 并更改了 OLE 自动化中的默认值 (现在只需自动化) 作为 OleAut32.dll 2.20.4049 版本的库。 此更改不会影响依赖自动化库的仅 32-位应用程序的 16 位应用程序。现在,00 和 17) 等 29 之间两位数字的年份将被解释为 2017年而两位数字年份 30 和 99 (如 72) 之间的年份将被解释为 1972年。新的自动化库提供 vba 需要 DateSerial 函数的功能。因此,Visual Basic 5.0 和后续版本不再实现此功能的规则在其运行时库中。

已更新的自动库都附带 Internet Explorer 3.0 版及更高版本、 Windows NT 3.51 Service Pack 5、 Windows NT 4.0、 Windows 95 OSR 2、 Office 97、 Visual Basic 5.0 和其他产品。

是什么? 全部此平均向谁使用 Visual Basic 开发人员

Visual Basic 3.0 和以前的版本中将所有的两位数年份转换为该 1900s年中。

Visual Basic 4.0 (16 位) 将所有的两位数年份转换为当前系统日期的世纪。根据函数的使用 Visual Basic 将根据在 16 位自动化库或运行时库的默认值将日期转换。发布是无论哪个日期函数使用一致的行为使 Visual Basic 4.0 后未修改过默认值在 16 位自动化库中。

Visual Basic 4.0 (32 位) 转换基于默认值时使用 DateSerial 函数将所有的两位数年份转换为当前系统日期的世纪的除外自动化库中的四位数年份为两位数字年份。32 位自动化库 (OleAut32.dll 版本 2.10) 附带 Visual Basic 4.0 发布时转换所有的两位数字年份为当前系统日期的世纪。如果两位数字年份是 30 到 99 之间,更高版本的 32 位自动化库 (OleAut32.dll 2.20 及更高版本) 转换为该 1900s年两位数字的年份。如果两位数字年份 00 到 29 之间是,将日期转换为在 2000年。

为 4.0,转换两位数字的年份为四位数字的年份的基础的所有日期函数自动化库中默认的 Visual Basic 版本。Visual Basic 5.0 附带版本 2.20.4054 将两位数年份转换为该 1900s年,如果两位数字年份是 30 到 99 之间的。如果两位数字年份 00 到 29 之间是,将日期转换为在 2000年。

怎么办? 如果我不要 Like 这些默认值吗?

您可能希望使用您自己的一组规则,而不是依赖于 vba 的本机的默认值。例如对于您可能需要输入两位数字年份,并将 00 到 49 对应于年到 2049 2000年和有 50 到 99 对应于年到 1999 年 1950年。

接受来自用户的日期字符串时, 进行测试以确定的位数为年份输入字符串的格式。根据在此示例应用程序的规则,1/11/45 是年 2045,而不是在 1945 年。在应用程序代码,更改要使用在适当的四位数字年份字符串,然后用四位数年份的日期字符串转换为日期变量。

示例代码

下面的代码计算到名为 txtDate,当您单击 cmdConvertDate 时文本框中输入数据。如果在日期中包含两位数字年份将该日期是转换为四位数年份的日期按照示例规则。 该代码然后显示输入,通过该代码根据示例规则转换为完整的年份该初始日期和完整的年份转换通过 Visual Basic 的本机的默认值。最后,txtDate 中显示该日期将转换为一个非不明确的日期,用适当的四位数字年份。

一旦您已经开发了代码以处理您自己的规则用于解释两位数字的年份,您可以在 32 位自定义控件使用该控件创建版本的 Visual Basic 中生成该代码。此产品和上生成的详细信息自己的自定义控件,请参阅 Microsoft Visual Basic 网站在:

http://www.microsoft.com/vbasic

此代码需要年/月/日格式输入日期输入,但可以方便地进行更改以处理不同的日期格式:

   Private Sub cmdConvertDate_Click()
       Dim strYear As String
       Dim intSlash As Integer
       If IsDate(txtDate) or txtDate = "2/29/00" Then
           'Find first date separator.
           intSlash = InStr(txtDate, "/")
           If intSlash > 0 Then
               'Find second date separator.
               intSlash = InStr(intSlash + 1, txtDate, "/")
               If intSlash > 0 Then
                   'Extract the year from the date.
                   strYear = Mid(txtDate, intSlash + 1)
                   If Len(strYear) = 2 Then
                       If CInt(strYear) < 50 Then
                       ' Less than 50: year = 20XX.
                           strYear = "20" & strYear
                       Else
                       ' Greater than 50: year = 19XX.
                           strYear = "19" & strYear
                       End If
                   End If
                   MsgBox "Date Entered: " & txtDate
                   MsgBox "Year (Our Rule): " & strYear
                   MsgBox "Year (VB Default): " & Year(txtDate)
               Else
                   MsgBox "Date not in expected format!"
               End If
           Else
               MsgBox "Date not in expected format!"
           End If
       Else
           MsgBox "Not a valid date!"
       End If
       '  Clarify date in txtDate.
       txtDate.Text = Left(txtDate.Text, intSlash) & strYear
   End Sub
				

参考

Microsoft Visual Basic 帮助文件 ; 在上搜索: 日期和 Variant 数据类型 ; IsDate 函数 ; CDate 和 $ CVDate 函数 ;

(c) Microsoft Corporation 1997 年,保留的所有权限。 韩建 Sceppa,Microsoft 公司的贡献

属性

文章编号: 162718 - 最后修改: 2014年2月21日 - 修订: 3.3
这篇文章中的信息适用于:
  • Microsoft Visual Basic 6.0 学习版
  • Microsoft Visual Basic 6.0 专业版
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
  • Microsoft Visual Basic Control Creation Edition
  • Microsoft Visual Basic 5.0 学习版
  • Microsoft Visual Basic 5.0 专业版
  • Microsoft Visual Basic 5.0 企业版
  • Microsoft Visual Basic 4.0 标准版
  • Microsoft Visual Basic 4.0 专业版
  • Microsoft Visual Basic 4.0 专业版
  • Microsoft Visual Basic 4.0 16-bit Enterprise Edition
  • Microsoft Visual Basic 4.0 32-Bit Enterprise Edition
  • Microsoft Visual Basic 2.0 Standard Edition
  • Microsoft Visual Basic 3.0 Professional Edition
  • Microsoft Visual Basic 1.0 Standard Edition
关键字:?
kbnosurvey kbarchive kbmt kbhowto KB162718 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 162718
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com