Vorbereiten von Visual Basic-Anwendungen für das Jahr 2000

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 162718 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Dieser Artikel wurde zuvor veröffentlicht unter D37381
Dieser Artikel wurde archiviert. Er wird im vorliegenden Zustand bereitgestellt und nicht mehr aktualisiert.
Dieser Artikel ist eine Übersetzung des folgenden englischsprachigen Artikels der Microsoft Knowledge Base:
162718 HOWTO: Prepare Visual Basic Applications for the Year 2000
Alles erweitern | Alles schließen

Zusammenfassung

----------
Die in diesem Artikel wiedergegebenen Informationen stellen den aktuellen Wissenstand von Microsoft zum Zeitpunkt des Uploads des Artikels in die Microsoft Website dar. Dieser kann sich bis zum heutigen Tage verändert haben. Wir empfehlen Ihnen daher dringend, sich im eigenen Interesse durch regelmäßigen Zugriff auf die Microsoft-Jahr 2000-Website unter http://microsoft.com/germany/jahr2000 über den aktuellsten Stand der Jahr 2000-Kategorisierung Ihres Microsoft-Produktes zu informieren. Die Microsoft-Jahr 2000-Website enthält stets die aktuellsten Informationen von Microsoft zum Jahr 2000-Problem.
----------

Zusammenfassung

Als Entwickler haben Sie sich wahrscheinlich schon Gedanken darüber gemacht, wie Ihre Anwendungen wohl mit Daten nach dem 31.12.1999 umgehen werden. Werden Ihre Programme am 1. Januar 2000 als Jahreszahl 2000, 1900, oder gar 1980 ausgeben? Ziel dieses Artikels ist es sicherzustellen, daß Ihre Visual Basic-Anwendungen sich bei Datumsangaben über den 31.12.1999 hinaus richtig verhalten. Weitergehende Informationen von Microsoft zum Thema Software und das Jahr 2000 entnehmen Sie bitte der Microsoft-Website unter der Adresse:
   http://www.microsoft.com/germany/jahr2000

Weitere Informationen

Zwar sind alle Versionen von Visual Basic in der Lage, Jahreszahlen über 1999 hinaus (vierstelliges Format) zu bearbeiten, aber beim Auftreten einer zweistelligen Jahreszahl in einem Datum (z.B.7/3/45) ist Visual Basic gezwungen zu mutmaßen, welchem Jahrhundert das Datum entspricht. Am besten läßt sich dieses Verhalten vielleicht anhand eines kurzen geschichtlichen Abrisses zu Visual Basic erläutern.
  • Geschichtlicher Abriß zu Visual Basic:
Sämtliche Versionen von Visual Basic für Windows (sowie dessen Vorläufer wie Visual Basic für DOS und QuickBasic) bis einschließlich Version 3.0 gingen bei zweistelligen Jahreszahlen immer davon aus, daß sich diese auf das Jahr 19.. beziehen. Der Code zur Implementierung dieser Standardeinstellung wurde in die Laufzeitbibliothek der jeweiligen Version eingebaut und hängt nicht von der Version des Betriebssystems oder der Jahrhundertzahl im aktuellen Systemdatum ab.

Während der Entwicklungsphase für Visual Basic 3.0 und 4.0 ergaben sich zwei Neuheiten, nämlich Visual Basic für Anwendungen und OLE Automation. Vor der Einführung dieser Technologien enthielt die Laufzeitbibliothek von Visual Basic den Code zur Umwandlung von einer zweistelligen in eine vierstellige Jahreszahl. OLE Automation bot einen großen Umfang an Funktionalitäten, auf die andere Anwendungen zugreifen konnten. Bei Visual Basic für Anwendungen mußte dieser Code nicht implementiert werden; stattdessen wurde auf die OLE Automation-Bibliotheken zurückgegriffen.

Bei der Entwicklung von Visual Basic 4.0 hatte man diese Interoperabilität berücksichtigt und sich bei der Umwandlung von zweistelligen in vierstellige Jahreszahlen in den meisten Fällen auf die OLE Automation-Bibliotheken verlassen. Die Ausnahme bildet hierbei die DatSeriell-Funktion. Diese wurde in der Laufzeitbibiliothek von Visual Basic implementiert, weil für Visual Basic eine umfassendere Funktionalität benötigt wurde, als sie damals von der OLE Automation-Bibliothek bereitgestellt werden konnte.

Während der Entwicklung von Visual Basic 4.0 stellte man bei Microsoft fest, daß die in früheren Versionen von Visual Basic verwendeten Standardeinstellungen zwar zuverlässig, aber nicht unbedingt praktisch waren. Daraufhin kam eine neue Regel auf. Demnach sollte eine zweistellige Jahreszahl auf die im Systemdatum angegebene Jahrhundertzahl angewandt werden. Somit wird Year(Date("1/1/00")) im Sinne des gegenwärtigen Jahrhunderts ausgewertet. Diese neue Regel wurde in den OLE Automation-Bibliotheken implementiert, auf die Visual Basic 4.0 und Visual Basic für Anwendungen zurückgreifen. In der Laufzeitbibliothek von Visual Basic 4.0 ist diese Regel auf für die DatSeriell-Funktion implementiert.

Später revidierte Microsoft das Konzept und änderte die Standardeinstellung in den OLE Automation (jetzt nur noch Automation)-Bibliotheken ab Version 2.20.4049 der OleAut32.dll. Diese Änderung hat keine Auswirkung auf 16-Bit-Anwendungen, die auf die Automation-Bibliotheken zurückgreifen, nur auf 32-Bit-Anwendungen. Eine zweistellige Jahreszahl zwischen 00 und 29 (z.B. 17) wird nun als 2017 interpretiert, während eine zweistellige Jahreszahl zwischen 30 und 99 (z.B. 72) als 1972 aufgefaßt wird. Die neuen Automation-Bibliotheken stellen die entsprechende Funktionalität zur Verfügung, die von Visual Basic für die DatSeriell-Funktion benötigt wird. Somit sind bei Visual Basic 5.0 und späteren Ausgaben die Regeln für diese Funktion nicht mehr in den Laufzeitbibliotheken implementiert.

Die aktualisierte Automation-Bibliothek wird mit dem Internet Explorer ab Version 3.0, mit Windows NT 3.51 Service Pack 5, Windows NT 4.0, Windows 95 OSR 2, Office 97, Visual Basic 5.0 und anderen Produkten ausgeliefert.

Was bedeutet all dies nun für Entwickler, die mit Visual Basic arbeiten?

Visual Basic 3.0 und ältere Versionen wandeln sämtliche zweistellige Jahreszahlen in 19.. um.

Visual Basic 4.0 (16-Bit) paßt alle zweistelligen Jahreszahlen an die Jahrhundertzahl im aktuellen Systemdatum an. Je nach der verwendeten Funktion wandelt Visual Basic das Datum entweder auf der Grundlage der Standardeinstellungen in den 16-Bit-Automation-Bibliotheken oder gemäß den Standardeinstellungen in der Laufzeitbibliothek um. Seit der Freigabe von Visual Basic 4.0 wurden die Standardeinstellungen in den 16-Bit-Automation-Bibliotheken nicht verändert, so daß das Verhalten unabhängig von der verwendeten Datumsfunktion konsistent ist.

Visual Basic 4.0 (32-Bit) wandelt zweistellige Jahreszahlen auf der Grundlage der Standardeinstellungen in den Automation-Bibliotheken in vierstellige Jahreszahlen um, außer bei der DatSeriell-Funktion, bei der sämtliche zweistellige Jahreszahlen auf die Jahrhundertzahl des aktuellen Systemdatums angewandt werden. Mit den 32-Bit-Automation-Bibliotheken (OleAut32.dll Version 2.10), die mit der Freigabe von Virtual Basic 4.0 ausgeliefert wurden, werden sämtliche zweistelligen Jahreszahlen auf die Jahrhundertzahl des aktuellen Systemdatums angewandt. Bei neueren Programmbibliotheken (OleAut 32.dll ab Version 2.20) werden zweistellige Jahreszahlen in 19.. umgewandelt, wenn diese zwischen 30 und 99 liegen. Liegt die Jahreszahl zwischen 00 und 29, wird das Datum in 20.. abgewandelt.

Bei Visual Basic-Versionen größer 4.0 werden zweistellige Jahreszahlen auf der Grundlage der Standardeinstellungen in den Automation-Bibliotheken für sämtliche Datumsfunktionen in vierstellige Jahreszahlen umgewandelt. Visual Basic 5.0 wird mit der Version 2.20.4054 ausgeliefert, bei der zweistellige Jahreszahlen zwischen 30 und 99 als 19.. erscheinen, während bei zweistelligen Jahreszahlen zwischen 00 und 29 das Datum in 20.. umgewandelt wird.

Was ist, wenn mir diese Standardeinstellungen nicht zusagen?

Möglicherweise wollen Sie lieber Ihre eigenen Regel erstellen, als auf die in Visual Basic eingebrachten Standardeinstellungen zurückzugreifen. Beispielsweise wollen Sie lediglich eine zweistellige Jahreszahl eingeben, und möchten, daß dabei 00 bis 49 den Jahreszahlen 2000 bis 2049 entspricht, und 50 bis 99 den Jahreszahlen 1950 bis 1999.

Beim Übernehmen eines Datums-Strings vom Anwender sollten Sie das Format des Strings überprüfen, um die Anzahl der für die Jahreszahl verwendeten Ziffern zu ermitteln. Gemäß den Regeln für die Beispielanwendung verweist die Angabe 1/11/45 auf das Jahr 2045, nicht das Jahr 1945. Ändern Sie im Code der Anwendung den String dahingehend, daß die entsprechende vierstellige Jahresangabe verwendet wird, und wandeln Sie dann den Datums-String mit der vierstelligen Jahreszahl in eine Datumsvariable um.

Mustercode

Mit dem folgenden Code werden bei Anklicken von "cmdConvertDate" Daten ausgewertet, die in ein Textfeld mit dem Namen "txtDate" eingegeben wurden. Enthält das Datum eine zweistellige Jahreszahl, wird das Datum gemäß der Musterregel in ein Datum mit einer vierstelligen Jahreszahl umgewandelt. Der Code zeigt daraufhin das ursprünglich eingegebene Datum und das von ihm gemäß der Musterregel umgewandelte Datum an, und die vollständige Jahreszahl wird über die in Visual Basic geltenden Standardeinstellungen umgewandelt. Schließlich wird das in "txtDate" angezeigte Datum noch in ein eindeutiges Datum mit der entsprechenden vierstelligen Jahreszahl umgewandelt.

Nachdem Sie einen entsprechenden Code zur Umsetzung eigener Regeln bei der Auswertung von zweistelligen Jahreszahlen entwickelt haben, können Sie diesen mit der Control Creation-Ausgabe von Visual Basic in eine 32-Bit-Custom Control einbauen. Entsprechende Hinweise zu dem genannten Produkt und zum Erstellen eigener Custom Controls entnehmen Sie bitte der Microsoft Visual Basic-Website unter folgender Adresse:
   http://www.microsoft.com/vbasic
Bei diesem Code müssen Datumsangaben im Format mm/dd/yy erfolgen, allerdings läßt sich der Code auf einfache Weise dahingehend abändern, daß auch andere Datumsformate bearbeitet werden:
   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
WEITERE HINWEISE:
Microsoft Visual Basic-Hilfedatei, Suche nach: "Daten-" und "Variant-Datentyp", "IstDatum-Funktion", "ZDate-" und "ZVarDat-Funktion".

Weitere Suchbegriffe: Millenium, Y2K, Year2000

Bitte beachten Sie: Bei diesem Artikel handelt es sich um eine Übersetzung aus dem Englischen. Es ist möglich, daß nachträgliche Änderungen bzw. Ergänzungen im englischen Originalartikel in dieser Übersetzung nicht berücksichtigt sind. Die in diesem Artikel enthaltenen Informationen basieren auf der/den englischsprachigen Produktversion(en). Die Richtigkeit dieser Informationen in Zusammenhang mit anderssprachigen Produktversionen wurde im Rahmen dieser Übersetzung nicht getestet. Microsoft stellt diese Informationen ohne Gewähr für Richtigkeit bzw. Funktionalität zur Verfügung und übernimmt auch keine Gewährleistung bezüglich der Vollständigkeit oder Richtigkeit der Übersetzung.

Eigenschaften

Artikel-ID: 162718 - Geändert am: Samstag, 1. März 2014 - Version: 2.1
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Visual Basic 6.0 Learning Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic 6.0 Enterprise Edition
  • Microsoft Visual Basic Control Creation Edition
  • Microsoft Visual Basic 5.0 Learning Edition
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • Microsoft Visual Basic 4.0 Standard Edition
  • Microsoft Visual Basic 4.0 Professional Edition
  • Microsoft Visual Basic 4.0 Professional Edition
  • 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
Keywords: 
kbnosurvey kbarchive kbyear2000 KB162718
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

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