Zastanów się, dlaczego potrzebujesz takiej zmiennej.
Najprawdopodobniej kłamiesz na temat swoich danych: ilekroć potrzebujesz zmiennej „koniec czasu”, nie masz na myśli faktycznego końca czasu; raczej wyrażasz takie rzeczy jak „nie ma górnej granicy dla tej daty”, „to wydarzenie trwa w nieskończoność” lub podobne.
Prawidłowym rozwiązaniem jest zatem wyrażenie tych zamiarów bezpośrednio zamiast polegania na magicznej wartości: użyj dopuszczalnych typów dat (gdzie null
wskazuje „brak ustawionej daty końcowej”), dodaj „nieokreślone” pole boolowskie, użyj polimorficznego opakowania (które może może to być prawdziwa data lub specjalna „nieokreślona” wartość), lub cokolwiek, co oferuje Twój język programowania.
Oczywiście prawidłowe rozwiązanie nie zawsze jest wykonalne, więc możesz w końcu użyć magicznej wartości, ale kiedy to zrobisz, musisz zdecydować o odpowiedniej wartości dla każdego przypadku, ponieważ które daty mają, a nie sens ma zależeć od modelowanej domeny - jeśli przechowujesz znaczniki czasu dziennika, 01/01/2999 to rozsądny „koniec czasu”; szanse, że Twoja aplikacja będzie nadal używana prawie za 1000 lat, są, jak sądzę, praktycznie zerowe. Podobne uwagi dotyczą aplikacji kalendarza. Ale co, jeśli twoje oprogramowanie ma obsługiwać dane naukowe, powiedzmy, długoterminowe prognozy dotyczące klimatu Ziemi? Ci mogą chcieć spojrzeć tysiąc lat w przyszłość. Lub posunąć się o krok dalej; astronomia, dziedzina, w której rozumowanie w bardzo dużych odstępach czasowych rzędu miliardów lat jest całkowicie normalne, zarówno na ścieżkę, jak i przyszłość. Dla tych osób 01/01/2999 to absolutnie absurdalne maksimum. OTOH, system kalendarza, który jest w stanie poradzić sobie z przedziałami czasowymi 10 bilionów lat w przyszłość, nie jest praktycznie praktyczny dla systemu śledzenia wizyt u dentysty, choćby ze względu na pojemność.
Innymi słowy, nie ma jednego najlepszego wyboru dla wartości, która jest zła i arbitralna z definicji na początek. Dlatego tak rzadko zdarza się, aby zdefiniować go w dowolnym języku programowania; te, które zwykle nie nazywają go „końcem czasu”, ale raczej czymś takim DATE_MAX
(lub Date.MAX
), i rozumieją to jako „największą wartość, którą można zapisać w typie danych daty”, a nie „koniec czasu” lub "w sposób nieokreślony".