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