Hãy tự hỏi tại sao bạn cần một biến như vậy ở nơi đầu tiên.
Rất có thể, bạn đang nói dối về dữ liệu của mình: bất cứ khi nào bạn cần một biến "kết thúc thời gian", bạn không đề cập đến thời gian kết thúc thực tế; thay vào đó, bạn đang bày tỏ những điều như "không có giới hạn trên cho ngày này", "sự kiện này tiếp diễn vô thời hạn" hoặc tương tự.
Sau đó, giải pháp chính xác là thể hiện trực tiếp các ý định này thay vì dựa vào giá trị ma thuật: sử dụng các loại ngày không thể (trong đó null
biểu thị "không có ngày kết thúc"), thêm trường boolean "không xác định", sử dụng trình bao bọc đa hình (có thể có thể là một ngày thực sự hoặc một giá trị "không xác định" đặc biệt) hoặc bất cứ điều gì ngôn ngữ lập trình của bạn cung cấp.
Tất nhiên, giải pháp chính xác không phải lúc nào cũng khả thi, vì vậy cuối cùng bạn có thể sử dụng một giá trị ma thuật, nhưng khi bạn làm, bạn phải quyết định một giá trị phù hợp trên cơ sở từng trường hợp, bởi vì ngày nào có và không có ý nghĩa tùy thuộc vào miền bạn đang lập mô hình - nếu bạn đang lưu trữ dấu thời gian nhật ký, 01/01/2999 là "thời gian kết thúc" hợp lý; cơ hội ứng dụng của bạn vẫn đang được sử dụng gần 1000 năm kể từ bây giờ, tôi sẽ nghĩ rằng, thực tế là bằng không. Cân nhắc tương tự đi cho các ứng dụng lịch. Nhưng điều gì sẽ xảy ra nếu phần mềm của bạn xử lý dữ liệu khoa học, giả sử, dự đoán dài hạn về khí hậu Trái đất? Những người thực sự có thể muốn nhìn một ngàn năm tới tương lai. Hoặc tiến thêm một bước; thiên văn học, một lĩnh vực mà nó hoàn toàn bình thường để suy luận trong những khoảng thời gian rất lớn theo thứ tự hàng tỷ năm, cả vào con đường và tương lai. Đối với những người đó, 01/01/2999 là một mức tối đa tùy ý hoàn toàn vô lý. OTOH, một hệ thống lịch có khả năng xử lý thời gian mười nghìn tỷ năm trong tương lai hầu như không thực tế đối với hệ thống theo dõi cuộc hẹn nha sĩ, nếu chỉ vì khả năng lưu trữ.
Nói cách khác, không có sự lựa chọn tốt nhất cho một giá trị sai và tùy ý theo định nghĩa để bắt đầu. Đây là lý do tại sao thật sự không phổ biến khi thấy một định nghĩa trong bất kỳ ngôn ngữ lập trình nào; những cái thường không đặt tên nó là "kết thúc thời gian", mà là một cái gì đó như DATE_MAX
(hoặc Date.MAX
), và lấy nó để có nghĩa là "giá trị lớn nhất có thể được lưu trữ trong kiểu dữ liệu ngày", không phải là "kết thúc thời gian" hoặc "vô thời hạn".