Rok 2000 a narzędzia dla programistów

Trzymanie daty

Osobnym zagadnieniem są systemy bazodanowe (Power Builder, Dbase, Access, Fox Pro itp.). Tu w zasadzie najważniejszym problemem jest to, czy baza danych pozwala zapisać datę z rokiem 4-znakowym i czy nie ma ewidentnych błędów (np. czy "wie" ile dni ma luty 2000 r.). Większość baz (a nawet chyba wszystkie) pozwalają tak zapisać daty. Z liczbą dni lutego może być różnie - zależy to nawet od wersji bazy danych. Natomiast w przypadku programowania w konkretnej bazie danych zdecydowanie ważniejszy jest problem domyślnych ustawień. Właśnie po roku 2000 mogą one spowodować, że baza przestanie działać poprawnie. Na przykład w dBase, Clipperze i starszych wersjach Fox Pro wykonanie Set century to bez argumentów powoduje, że ustawiony zostanie domyślny XIX wiek. Dopiero w Fox Pro 6.0 Set century to ustawia wiek zgodnie z bieżącą datą.

Cobol i inne starsze języki, w których tworzono aplikacje bazodanowe w latach 70., w zasadzie nie dysponowały wbudowanymi mechanizmami do przechowywania daty. Języki te miały zwykle typ numeryczny i łańcuchowy. Od programisty zależało, jak datę przechowa. W takim przypadku problem polega na tym, czy dana aplikacja została poprawnie napisana i zaprojektowana - jeżeli nie, trzeba ją zmienić. Tu mogą pomóc narzędzia do automatycznej analizy kodu, wyspecjalizowane w problemie roku 2000. W ostatnim okresie pojawiło się stosunkowo dużo tego typu programów.

Można się zastanawiać, czy zmiana wersji narzędzia i rekompilacja programu pozwoli stworzyć aplikację zgodną z rokiem 2000. Z jednej strony (w przypadku systemów bazodanowych) może to pomóc (jeśli programista nie popełnił błędów podczas programowania). Z drugiej, zazwyczaj każda kolejna wersja narzędzia działa trochę inaczej. Może się więc zdarzyć, że po skompilowaniu kolejną wersją narzędzia rok będzie obsługiwany poprawnie, ale reszta aplikacji nie będzie działać w ogóle.

Problemy z datą w wybranych narzędziach programistycznych i systemach bazodanowych

Clipper, Fox Pro, dBase, Visual dBase

Programy napisane w Clipper i Fox Pro korzystają z formatu danych zbliżonego do wykorzystywanego w dBase. Tak więc największym rokiem, który można zapisać to 9999. Computer Associates twierdzi, że wszystkie wersje Clippera, począwszy od SUMMER '87 (4.0), są zgodne z rokiem 2000. Jednak wewnątrz programu mogą znajdować się pułapki, które uniemożliwią poprawne działanie po roku 2000.

Po pierwsze, może być konieczne przeprojektowanie wyglądu ekranów i włączenie na początku instrukcji SET CENTURY ON. Należy także odpowiednio ustawić SET EPOCH TO (instrukcji określającej przedział lat, gdy rok wpisywany jest tylko dwiema cyframi). Należy unikać funkcji CTOD, by format daty był niezależny od SET DATE TO. Z programu powinna zniknąć instrukcja LUPDATE(), ponieważ zawsze zwracana jest data z rokiem 19xx. Wynika to stąd, że wewnętrznie Clipper przechowuje datę modyfikacji bazy danych jako trzy bajty. Należy zanalizować także złożone indeksy nakładane na tabele - jeżeli wykorzystywane są funkcje przekształcające daty, należy upewnić się, że uwzględniają one pełny rok.

Programiści w Fox Pro powinni dokładnie przeczytać dokumentację danej wersji narzędzia, ponieważ zmieniały się domyślne parametry części funkcji (w tym także funkcji związanych z datą).

Java

W Javie zakres stosowanych dat zależy od wersji JDK, i tak (na podstawie m.in. testów Sybase): JDK 1.02: 1970-2038 JDK 1.1: 1900-2050. Uwaga! Dodatkowo może zależeć to od stosowanej przez klienta maszyny wirtualnej.

Power Builder

Zakres dat obejmuje lata 1000-3000. Podobnie jak przy Clipperze należy bardzo uważnie przeanalizować programy (eliminacja obcinania dat; poprawne indeksy itp.) i sprawdzić, jakie parametry przyjmowane są domyślnie.

Kompilatory C/C++, Fortran, Borland Pascal

Zakres i zachowanie zależy od bibliotek i systemu operacyjnego. Generalnie przyjmowane są ograniczenia z Uniksa, czyli zakres 1970-2038.

Delphi

Zachowanie Delphi zależy od systemu operacyjnego i producenta bazy danych. Klasy TDate i TDateTime obsługują lata, począwszy od 1899 r.

Borland C++ i Borland C++ Builder

Borland RTL ma ograniczenie od 1970 r. do 2038. Borland C++ Builder korzysta z tych samych modułów VCL co Delphi.


TOP 200