Запитайте себе, навіщо вам потрібна така змінна.
Швидше за все, ви брешите про свої дані: коли вам потрібна змінна "кінець часу", ви не маєте на увазі фактичного кінця часу; скоріше ви висловлюєте речі типу "немає верхньої межі для цієї дати", "ця подія триває нескінченно" або подібне.
Правильне рішення, таким чином, полягає в тому, щоб висловити ці наміри безпосередньо, а не покладатися на магічне значення: використовуйте зведені типи дат (де null
вказується "не встановлено кінцеву дату"), додайте "невизначене" булеве поле, використовуйте поліморфну обгортку (яка може будь то реальна дата або спеціальне "невизначене" значення), або все, що може запропонувати ваша мова програмування.
Звичайно, правильне рішення не завжди можливо, тому ви, можливо, в кінцевому підсумку використовуєте магічне значення, але коли ви це зробите, вам потрібно визначитися з відповідним значенням на кожен випадок, бо які дати роблять, а чи ні сенс залежить від домену, який ви моделюєте - якщо ви зберігаєте часові позначки журналу, 01.01.2999 є розумним "кінцем часу"; я вважаю, що шанси на те, що ваша програма все ще використовується майже 1000 років, практично дорівнюють нулю. Аналогічні міркування стосуються програм календаря. Але що робити, якщо ваше програмне забезпечення призначене для обробки наукових даних, скажімо, довгострокових прогнозів щодо клімату Землі? Вони, можливо, хочуть заглянути в тисячу років у майбутнє. Або зробіть це на крок далі; астрономія, поле, де цілком нормально міркувати в дуже великих часових межах, на порядку мільярдів років, і в шлях, і в майбутнє. Для них 01.01.2999 - це абсолютно смішний довільний максимум. OTOH, календарна система, яка здатна вирішити тривалість часу на десять трильйонів років у майбутньому, навряд чи практична для системи відстеження призначення стоматолога, хоч би лише через пропускну здатність.
Іншими словами, не існує єдиного найкращого вибору для значення, яке є неправильним і довільним за визначенням для початку. Ось чому насправді рідко бачити його, визначене в будь-якій мові програмування; ті, хто зазвичай не називають його "кінцем часу", а щось на зразок DATE_MAX
(або Date.MAX
), і вважають це "найбільшим значенням, яке може зберігатися в типі даних дати", а не "кінцем часу" або "на невизначений термін".