Java và Oracle đều có một loại dấu thời gian được gọi là Ngày. Các nhà phát triển có xu hướng thao túng những thứ này như thể chúng là ngày lịch , điều mà tôi đã thấy gây ra những lỗi khó chịu một lần.
Đối với số lượng ngày cơ bản, bạn có thể chỉ cần cắt bớt phần thời gian khi nhập, tức là giảm độ chính xác. Nhưng nếu bạn làm điều đó với phạm vi ngày, (ví dụ: 9 / 29-9 / 30 ), sự khác biệt giữa hai giá trị này là 1 ngày, thay vì 2. Ngoài ra, so sánh phạm vi yêu cầu 1) thao tác cắt ngắn:
start < trunc(now) <= end
hoặc 2) số học:start < now < (end + 24hrs)
. Không kinh khủng, nhưng không KHÔ .Một giải pháp thay thế là sử dụng dấu thời gian thực: 29/9 00:00:00 - 10/1 00:00:00. (nửa đêm đến nửa đêm, vì vậy không bao gồm bất kỳ phần nào của tháng 10). Bây giờ khoảng thời gian là về bản chất chính xác, và so sánh phạm vi rất đơn giản:
start <= now < end
. Chắc chắn rõ ràng hơn cho quá trình xử lý nội bộ, tuy nhiên ngày kết thúc cần phải được chuyển đổi theo đầu vào ban đầu (+1) và đầu ra (-1), giả sử là phép ẩn dụ ngày lịch ở cấp người dùng.
Bạn xử lý phạm vi ngày trong dự án của mình như thế nào? Có các lựa chọn thay thế khác không? Tôi đặc biệt quan tâm đến cách bạn xử lý điều này trên cả hai phía Java và Oracle của phương trình.