Java と Oracle の両方にDate と呼ばれるタイムスタンプ型があります。開発者はこれらをカレンダーの日付であるかのように操作する傾向があり、これが厄介な 1 回限りのバグを引き起こすのを見てきました。
基本的な日付の数量については、入力時に時刻部分を単純に切り取ることができます。つまり、精度を下げます。ただし、日付範囲 (例: 9/29-9/30 ) でこれを行うと、これら 2 つの値の差は 2 日ではなく 1 日になります。また、範囲比較には、1) 切り捨て操作:
start < trunc(now) <= end
、または2) 算術:start < now < (end + 24hrs)
. ひどくはありませんが、DRYではありません。別の方法として、9/ 29 00:00:00 - 10/1 00:00:00という実際のタイムスタンプを使用することもできます。(午前 0 時から午前 0 時までなので、10 月の一部は含まれません)。現在、期間は本質的に正しく、範囲の比較はより単純です:
start <= now < end
. 内部処理では確かにクリーンですが、終了日は最初の入力 (+1) で変換する必要があり、出力 (-1) では、ユーザー レベルでのカレンダー日付のメタファーを想定しています。
プロジェクトで日付範囲をどのように処理しますか? 他の選択肢はありますか?Java側とOracle側の両方でこれをどのように処理するかに特に興味があります.