Polska MicrosoftSzukajPomocProduktySklepNapisz Do Nas   Microsoft
 
Najlepiej przeglądać z

Microsoft Internet Explorer


Powrót


Załącznik A
Zakresy dat przechowywanych w programach Microsoftu

Załącznik B
Zasady określania lat przestępnych

Załącznik C
Rozwiązanie problemów z BIOS-em

Załącznik D
Zalecane zasady postępowania odnośnie roku 2000 dla projektantów aplikacji, programistów i osób testujących

Załącznik E
Jak przygotować aplikację na rok 2000 w Visual Basicu lub Visual FoxPro.

Jak przygotować aplikacje w FoxPro na rok 2000

Załącznik F
Zasady konwersji roku dwucyfrowego na rok czterocyfrowy

Rok 2000: problemy i rozwiązania

Problem roku 2000 – często zadawane pytania

 

Microsoft a rok 2000


Załącznik E: jak przygotować aplikację na rok 2000 w Visual Basicu

Poniżej przytaczamy dwa artykuły z bazy wiedzy Microsoftu (http://www.microsoft.com/kb), zawierające porady dotyczące zapewnienia poprawnego działania w roku 2000 aplikacji, które napisano przy użyciu systemów programowania Microsoft Visual Basic i Visual FoxPro.

Jak przygotować aplikacje w Visual Basicu na rok 2000

Data ostatniego przeglądu: 24 czerwca 1997.

Nr artykułu: Q162718.

Informacje zawarte w tym artykule dotyczą systemów:

  • Microsoft Visual Basic dla Windows, wersji 5.0, edycji Control Creation, Learning, Professional oraz Enterprise
  • Microsoft Visual Basic dla Windows, wersji 4.0 (16 bitowa i 32-bitowa), edycji Standard, Professional oraz Enterprise
  • Microsoft Visual Basic dla Windows, wersji 2.0 i 3.0, edycji Standard, Professional oraz Enterprise
  • Systemu programowania Microsoft Visual Basic dla Windows, wersji 1.0.

STRESZCZENIE

Jako programista na pewno troszczysz się o to, jak twoje aplikacje będą obsługiwać daty po 31 grudnia 1999. Czy pierwszego stycznia 2000 twój program uzna, że jest rok 2000, 1900, czy może nawet 1980? Celem tego artykułu jest zapewnienie cię, że aplikacje w Visual Basicu będą prawidłowo działać przy datach następujących po 31 grudnia 1999. Jeśli pragniesz uzyskać od Microsoftu dokładniejsze informacje o oprogramowaniu i roku 2000, radzimy zapoznać się z dokumentacją w witrynie WWW Microsoftu pod adresem:

http://www.microsoft.com/cio/year.asp

BLIŻSZE INFORMACJE

Wprawdzie wszystkie wersje Visual Basica obsługują lata następujące po roku 1999 (używając formatu czterocyfrowego), ale jeśli w dacie poda się rok dwucyfrowy (np. 3.7.45), wówczas Visual Basic według pewnych zasad samoczynnie domyśli się, którego stulecia ta data dotyczy. Najlepiej będzie wyjaśnić działanie Visual Basica przez podanie zarysu jego historii.

Zarys historii Visual Basica

We wszystkich wersjach Visual Basica do Windows przed wersją 3.0 (łącznie z jego poprzednikami, programami Visual Basic do DOS-u i QuickBasic), rok dwucyfrowy był zawsze interpretowany jako 19xx. Taka interpretacja została zakodowana w bibliotekach wykonawczych (runtime) we wszystkich wersjach, więc nie zależy ani od wersji systemu operacyjnego, ani od stulecia bieżącej daty systemowej.

W czasie między wprowadzaniem Visual Basica 3.0 a implementacją wersji 4.0 powstały dwa nowe elementy: Visual Basic for Applications oraz Automatyzacja OLE. Przed ich pojawieniem się biblioteka wykonawcza Visual Basica zawierała kod realizujący konwersję roku dwucyfrowego na rok czterocyfrowy. Ponieważ Automatyzacja OLE udostępniała innym aplikacjom wiele możliwości funkcjonalnych, Visual Basic for Applications nie potrzebował już takiego kodu: zamiast niego wywoływał funkcje z bibliotek Automatyzacji OLE. Visual Basic 4.0 został opracowany z uwzględnieniem tego współdziałania, więc w większości przypadków dokonywał konwersji roku dwucyfrowego na rok czterocyfrowy przez wywoływanie funkcji z bibliotek Automatyzacji OLE. Wyjątkiem od tej zasady była funkcja DateSerial, która została zaimplementowana w bibliotece wykonawczej Visual Basica. Stało się tak, ponieważ Visual Basic wymagał większych możliwości funkcjonalnych niż biblioteka Automatyzacji OLE była w stanie udostępnić.

Podczas implementacji Visual Basica 4.0 w Microsofcie stwierdzono, że zasady interpretacji dat stosowane w poprzednich wersjach Visual Basica w praktyce nie są najlepsze. Dlatego opracowano nowe zasady: rok dwucyfrowy zaczęto poddawać konwersji na rok wynikający z bieżącego stulecia (według daty systemowej), co znaczy, że wartością wywołania Year(Date("1.1.00")) jest rok w bieżącym stuleciu. Nowa reguła została zaimplementowana w bibliotekach Automatyzacji OLE, używanych przez Visual Basic 4.0 oraz Visual Basic for Applications. Biblioteka wykonawcza Visual Basica 4.0 realizowała również tę zasadę w funkcji DateSerial.

Jednak po ponownym rozważeniu tej kwestii Microsoft znowu zmienił zasady interpretacji dat w bibliotekach Automatyzacji OLE (która teraz nazywa się po prostu Automatyzacja). Zmiany te obowiązują od wprowadzenia OleAut32.dll w wersji 2.20.4049. Nie dotyczą one aplikacji 16-bitowych, które używają bibliotek Automatyzacji, a jedynie 32-bitowych. Obecnie rok dwucyfrowy pomiędzy 00 a 29 (na przykład 17) jest interpretowany jako 20xx (np. 2017), natomiast rok dwucyfrowy pomiędzy 30 a 99 (na przykład 72) jest interpretowany jako 19xx (np. 1972). Nowe biblioteki Automatyzacji zapewniają też odpowiednią realizację funkcji DateSerial. Z tego powodu Visual Basic 5.0 i wersje późniejsze nie implementują już tej funkcji w swoich bibliotekach wykonawczych. Aktualna biblioteka Automatyzacji jest dostarczana wraz z Internet Explorerem 3.0 i wersjami późniejszymi, Windows NT 3.51 Service Pack 5, Windows NT 4.0, Windows 95 OSR 2, Office 97, Visual Basic 5.0 oraz z innymi produktami.

Konsekwencje dla programistów używających Visual Basica

Visual Basic 3.0 oraz wersje wcześniejsze interpretują zawsze rok dwucyfrowy jako 19xx. Visual Basic 4.0 (16-bitowy) interpretuje natomiast rok dwucyfrowy jako należący do stulecia odpowiadającego bieżącej dacie systemowej. Zależnie od użytej funkcji, Visual Basic dokonuje konwersji daty zgodnie z zasadami interpretacji w 16-bitowych bibliotekach Automatyzacji albo w bibliotece wykonawczej. W 16-bitowych bibliotekach Automatyzacji zasady te nie zostały zmienione od czasów wprowadzenia wersji 4.0 Visual Basica, a zatem interpretacja jest jednakowa i nie zależy od użytej funkcji.

Visual Basic 4.0 (32-bitowy) dokonuje konwersji roku dwucyfrowego na rok czterocyfrowy zgodnie z zasadami interpretacji w bibliotekach Automatyzacji, z wyjątkiem funkcji DateSerial. Funkcja ta interpretuje rok dwucyfrowy jako należący do stulecia odpowiadającego bieżącej dacie systemowej. 32-bitowe biblioteki Automatyzacji (OleAut32.dll wersja 2.10), udostępnione wtedy, gdy wprowadzono Visual Basic 4.0, interpretowały rok dwucyfrowy jako należący do stulecia odpowiadającego bieżącej dacie systemowej. Późniejsze 32-bitowe biblioteki Automatyzacji (OleAut32.dll wersja 2.20 i późniejsze) interpretują rok dwucyfrowy jako 19xx, jeżeli rok dwucyfrowy należy do przedziału od 30 do 99. Jeżeli zaś rok dwucyfrowy należy do przedziału od 00 do 29, rok dwucyfrowy jest interpretowany jako 20xx.

A jeśli te zasady interpretacji mi nie odpowiadają?

Zamiast zasad interpretacji stosowanych przez Visual Basic można wprowadzić własne zasady. Na przykład można przyjąć, że lata dwucyfrowe od 00 do 49 odpowiadają latom 2000 do 2049, a lata dwucyfrowe od 50 do 99 odpowiadają latom 1950 do 1999.

Po wprowadzeniu napisu oznaczającego datę, należy sprawdzić jego format i ustalić, ile cyfr występuje w numerze roku. Zgodnie z naszym przykładem data 1.11.45 należy do roku 2045, a nie 1945. W kodzie takiej aplikacji należy uzupełnić napis w ten sposób, aby podany został odpowiedni rok czterocyfrowy, a następnie przekształcić skorygowany napis na informację typu data.

Kod przykładowy

Poniższy kod, wykonywany po kliknięciu cmdConvertDate, wyznacza datę wprowadzoną do pola tekstowego o nazwie txtDate. Jeżeli data zawiera rok dwucyfrowy, jest on przekształcany na rok czterocyfrowy zgodnie z przykładową zasadą. Program wyświetla następnie datę wprowadzoną na początku, pełny rok po konwersji według przykładowej zasady, a także pełny rok po konwersji według domyślnych zasad Visual Basica. Ostatecznie data wyświetlona w txtDate jest przekształcana na jednoznaczną datę z rokiem czterocyfrowym.

Gdy użytkownik opracuje kod, który realizuje ustalone przez niego zasady interpretacji lat dwucyfrowych, może go dołączyć do własnego 32-bitowego formantu za pomocą Visual Basica w wersji Control Creation. Więcej informacji o tym produkcie oraz o budowaniu własnych formantów można znaleźć w witrynie WWW Microsoftu pod adresem http://www.microsoft.com/vbasic.

Poniższy kod przyjmuje, że daty są wprowadzane w formacie mm/dd/yy, ale może być łatwo dostosowany do obsługi innego formatu daty.

Private Sub cmdConvertDate_Click()
       Dim strYear As String
       Dim intSlash As Integer

       If IsDate(txtDate) Then
           'Wyszukaj pierwszy separator daty.
           intSlash = InStr(txtDate, "/")
           If intSlash > 0 Then
               ' Wyszukaj drugi separator daty.
               intSlash = InStr(intSlash + 1, txtDate, "/")
               If intSlash > 0 Then
                   'Wydziel rok z daty.
                   strYear = Mid(txtDate, intSlash + 1)
                   If Len(strYear) = 2 Then
                       If CInt(strYear) < 50 Then
                       ' Mniejszy od 50: rok = 20XX.
                           strYear = "20" & strYear
                       Else
                       ' Równy lub większy od 50: rok = 19XX.
                           strYear = "19" & strYear
                       End If
                   End If
                   MsgBox "Wprowadzona data: " & txtDate
                   MsgBox "Rok (nasza zasada): " & strYear
                   MsgBox "Rok (domyślny w VB): " & Year(txtDate)
               Else
                   MsgBox "Niewłaściwy format daty!"
               End If
           Else
               MsgBox " Niewłaściwy format daty!"
           End If
       Else
           MsgBox "Niepoprawna data!"
       End If
       ' Wprowadź jednoznaczną datę do txtDate.
       txtDate.Text = Left(txtDate.Text, intSlash) & strYear
   End Sub

LITERATURA

Plik pomocy do programu Microsoft Visual Basic; wyszukać tematy “Date and Variant Data Types”, “IsDate function”, “CDate and CVDate functions”.

(c) Microsoft Corporation 1997. Wszelkie prawa zastrzeżone. Współautor: David Sceppa, Microsoft Corporation.

 


Microsoft Corporation© Wszelkie prawa zastrzeżone