![](/file/18315/Y2K_Resource_Nov99.iso/webcon~1/usa/year2k/images/spacer.gif)
Microsoft Year 2000 Readiness Disclosure & Resource Center |
![](/file/18315/Y2K_Resource_Nov99.iso/webcon~1/usa/year2k/images/spacer.gif) |
![](/file/18315/Y2K_Resource_Nov99.iso/webcon~1/usa/year2k/images/spacer.gif) |
![](/file/18315/Y2K_Resource_Nov99.iso/webcon~1/usa/year2k/images/spacer.gif) | Visual Basic (16-bit) 3.0 (English) - 16-Bit Win
Product Summary |
Product: Visual Basic (16-bit) Version: 3.0 |
Category: Not Compliant* Operating System: 16-Bit Win |
Language: English |
Release Date: 01 Jan 1995 |
Operational Range: |
- |
Can applications be built with this tool that adhere to the Microsoft Year 2000 Compliance Statement? Yes |
Prerequisites: |
See Below |
Product Dependencies: |
MS-DOS, Windows 3.x, Windows NT 4 Service Pack 4 + software updates, Windows NT 3.51 Service Pack 5 + software updates, Windows 95, Windows 98 with software updates |
Clock Dependencies: |
System Clock, Visual Basic runtime, (OLE) Automation Libraries |
Last Updated: |
27 Aug 1999 | |
Product Details |
This report applies to: Standard and Professional Editions of Microsoft Visual Basic 3.0 and 2.0 Microsoft Visual Basic programming system for Windows, version 1.0
Operational Range for Data: 1/1/2000 using defaults for 2-digit year
Known Issues: VB 3.0, 2.0, 1.0:
Visual Basic 3.0 and all prior versions convert all two-digit years to the 1900s.
See KB #Q162718.
Creating Year 2000 compliant Visual Basic applications with versions 1, 2, or 3. While Microsoft made the determination to classify Visual Basic 3.0 and prior as non-compliant with Year 2000 compatibility, using responsible programming practices, developers can create applications that are fully Year 2000 compliant, as is detailed below. By default, the passing of a two-digit year in a date (such as 7/3/45) is interpreted by Visual Basic 3.0 and prior to be in the 1900Æs. In many cases, applications can be easily modified and recompiled for Year 2000 compatibility by converting to four-digit date fields.
2-Digit Date Conversion ------------------------------------------------------------------ While all versions of Visual Basic will handle years greater than 1999 (in a 4-digit format), passing a 2-digit year in a date (such as 7/3/45) forces Visual Basic to assume to what century the date corresponds. For all versions of Visual Basic for Windows (including its predecessors such as Visual Basic for MS-DOS and QuickBasic) prior to and including 3.0, 2-digit years were always assumed to be in the 1900s. The code to implement this default was built into each version's run-time library and does not depend on the version of the operating system or the century of the current system date.
Between the development cycles for Visual Basic 3.0 and 4.0, two new entities emerged: Visual Basic for Applications and OLE Automation. Prior to the advent of these technologies, Visual Basic's runtime library contained the code responsible for converting a 2-digit year to a 4-digit year. OLE Automation exposed a great deal of functionality that other applications could access. Visual Basic for Applications did not need to implement this code; it could make calls to the OLE Automation libraries instead. Visual Basic 4.0 was developed with this interoperability in mind and began to rely on the OLE Automation libraries to convert 2-digit years to 4-digit years in most cases. The exception to the rule is the DateSerial function that was implemented in the Visual Basic runtime library because Visual Basic required more functionality than the OLE Automation library could provide at that time. During the Visual Basic 4.0 development cycle, a new rule emerged. A 2-digit year would be converted to the current century of the system date. Thus, Year(Date("1/1/00")) would evaluate to the current century. This new rule was implemented in the OLE Automation libraries used by Visual Basic 4.0 and Visual Basic for Applications. The Visual Basic 4.0 runtime library also implements the rule for the DateSerial function. Microsoft changed the default in the OLE Automation (now simply Automation) libraries as of version 2.20.4049 of OleAut32.dll. This change does not affect 16-bit applications that rely on the Automation libraries, only 32-bit applications. Now, a 2-digit year between 00 and 29 (such as 17) is interpreted as 2017 while a 2-digit year between 30 and 99 (such as 72) is interpreted as 1972. The new Automation libraries provide the functionality that Visual Basic requires for the DateSerial function. Thus, Visual Basic 5.0 and subsequent releases no longer implement rules for the DateSerial function in their runtime libraries. The updated Automation library ships with Internet Explorer version 3.0 and later, Windows NT 3.51 Service Pack 5, Windows NT 4.0, Windows 95 OSR2, Office 97, Visual Basic 5.0 and other products.
For additional information, please refer to Knowledge Base article Q162718 at
What Does All of This Mean to Developers Who Use Visual Basic? -------------------------------------------------------------- Visual Basic 3.0 and prior versions convert all 2-digit years to the 1900s. Visual Basic 4.0 (16-bit) converts all 2-digit years to the century of the current system date. Depending on the function used, Visual Basic converts the date based on defaults in either the 16-bit Automation libraries or the runtime library. The defaults in the 16-bit Automation libraries have not been modified since Visual Basic 4.0 released. Therefore the behavior is consistent regardless of which date function is used. Visual Basic 4.0 (32-bit) converts 2-digit years to 4-digit years based on the default in the Automation libraries except when using the DateSerial function that converts all 2-digit years to the century of the current system date. The 32-bit Automation libraries (OleAut32.dll version 2.10) that shipped when Visual Basic 4.0 was released converted all 2-digit years to the century of the current system date. Later 32-bit Automation libraries (OleAut32.dll version 2.20 and later) convert 2-digit years to the 1900s if the 2-digit year is between 30 and 99. If the 2-digit year is between 00 and 29, the date is converted to the 2000s. Visual Basic 5.0 converts 2-digit years to 4-digit years based on the default in the Automation libraries for all date functions. Visual Basic 5.0 shipped with version 2.20.4054 that converts 2-digit years to the 1900s if the 2-digit year is between 30 and 99. If the 2-digit year is between 00 and 29, the date is converted to the 2000s.
What if I Don't Like Those Defaults? ------------------------------------ You may want to use your own set of rules instead of relying on the defaults native to Visual Basic. For example, you may want to enter only a 2-digit year and have 00 to 49 correspond to the years 2000 to 2049 and have 50 to 99 correspond to the years 1950 to 1999. When accepting a date string from the user, test the format of the string to determine the number of digits entered for the year. According to the rules for this sample application, 1/11/45 is in the year 2045, and not in the year 1945. Within the code for the application, change the string to use the appropriate 4-digit year, then convert that date string with the 4-digit year into a date variable.
Sample Code ----------- The following code evaluates the data entered into a textbox named txtDate when you click cmdConvertDate. If the date contains a 2-digit year, the date is converted into a 4-digit year date according to the sample rule. The code then displays the initial date entered, the full year as converted by the code according to the sample rule, and the full year converted by the defaults native to Visual Basic. Finally, the date displayed in txtDate is converted to a non-ambiguous date with the appropriate 4-digit year. This code requires that dates are entered in the mm/dd/yy format, but it could easily be changed to handle a different date format: 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
| |
Return to Search Screen
Legend of Symbols: |
* |
The product is compliant with recommended customer action. This indicates a prerequisite action is recommended which may include loading a software update or reading a document. |
# |
The product is compliant with acceptable deviations from Microsoft's standard of compliance. An acceptable deviation does not affect the core functionality, data integrity, stability, or reliability of the product. |
+ |
The product is compliant with pending Year 2000 software updates. Future maintenance actions will be recommended shortly. See Product Guide for further details. |
Note: Compliance ratings given for each product assume that all recommended actions have been taken. |
If after reviewing this information you have additional questions related to this product, click here.
YEAR 2000 READINESS DISCLOSURE
ALL COMMUNICATIONS OR CONVEYANCES OF INFORMATION TO YOU CONCERNING MICROSOFT AND THE YEAR 2000, INCLUDING BUT NOT LIMITED TO THIS DOCUMENT OR ANY OTHER PAST, PRESENT OR FUTURE INFORMATION REGARDING YEAR 2000 TESTING, ASSESSMENTS, READINESS, TIME TABLES, OBJECTIVES, OR OTHER (COLLECTIVELY THE "MICROSOFT YEAR 2000 STATEMENT"), ARE PROVIDED AS A "YEAR 2000 READINESS DISCLOSURE" (AS DEFINED BY THE YEAR 2000 INFORMATION AND READINESS DISCLOSURE ACT) AND CAN BE FOUND AT MICROSOFT'S YEAR 2000 WEBSITE LOCATED AT http://www.microsoft.com/year2000/ (the "Y2K WEBSITE"). EACH MICROSOFT YEAR 2000 STATEMENT IS PROVIDED PURSUANT TO THE TERMS HEREOF, THE TERMS OF THE Y2K WEBSITE, AND THE YEAR 2000 INFORMATION AND READINESS DISCLOSURE ACT FOR THE SOLE PURPOSE OF ASSISTING THE PLANNING FOR THE TRANSITION TO THE YEAR 2000. EACH MICROSOFT YEAR 2000 STATEMENT CONTAINS INFORMATION CURRENTLY AVAILABLE AND IS UPDATED REGULARLY AND SUBJECT TO CHANGE. MICROSOFT THEREFORE RECOMMENDS THAT YOU CHECK THE Y2K WEBSITE REGULARLY FOR ANY CHANGES TO ANY MICROSOFT YEAR 2000 STATEMENT. EACH MICROSOFT YEAR 2000 STATEMENT IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. CONSEQUENTLY, MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. MOREOVER, MICROSOFT DOES NOT WARRANT OR MAKE ANY REPRESENTATIONS REGARDING THE USE OR THE RESULTS OF THE USE OF ANY MICROSOFT YEAR 2000 STATEMENT IN TERMS OF ITS CORRECTNESS, ACCURACY, RELIABILITY, OR OTHERWISE. NO ORAL OR WRITTEN INFORMATION OR ADVICE GIVEN BY MICROSOFT OR ITS AUTHORIZED REPRESENTATIVES SHALL CREATE A WARRANTY OR IN ANY WAY DECREASE THE SCOPE OF THIS WARRANTY DISCLAIMER. IN NO EVENT SHALL MICROSOFT OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER REGARDING ANY MICROSOFT YEAR 2000 STATEMENT INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS, PUNITIVE OR SPECIAL DAMAGES, EVEN IF MICROSOFT OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES, SO THE FOREGOING LIMITATION MAY NOT APPLY TO YOU. THE INFORMATION CONTAINED IN EACH MICROSOFT YEAR 2000 STATEMENT IS FOUND AT THE Y2K WEBSITE AND IS INTENDED TO BE READ IN CONJUNCTION WITH OTHER INFORMATION LOCATED AT THE Y2K WEBSITE, INCLUDING BUT NOT LIMITED TO MICROSOFT'S YEAR 2000 COMPLIANCE STATEMENT, THE DESCRIPTION OF THE CATEGORIES OF COMPLIANCE INTO WHICH MICROSOFT HAS CLASSIFIED ITS PRODUCTS IN ITS YEAR 2000 PRODUCT GUIDE, AND THE MICROSOFT YEAR 2000 TEST CRITERIA.
ANY MICROSOFT YEAR 2000 STATEMENTS MADE TO YOU IN THE COURSE OF PROVIDING YEAR 2000 RELATED UPDATES, YEAR 2000 DIAGNOSTIC TOOLS, OR REMEDIATION SERVICES (IF ANY) ARE SUBJECT TO THE YEAR 2000 INFORMATION AND READINESS DISCLOSURE ACT (112 STAT. 2386). IN CASE OF A DISPUTE, THIS ACT MAY REDUCE YOUR LEGAL RIGHTS REGARDING THE USE OF ANY SUCH STATEMENTS, UNLESS OTHERWISE SPECIFIED BY YOUR CONTRACT OR TARIFF.
|