私のプログラムでは、この日付をjava.sql.dateオブジェクトとして表現する必要がありますが、新しい日付(カレンダーを使用)を作成して ' 9999-12-31 'を呼び出し、最後にこのjava.util.dateオブジェクトをjava.sql.dateオブジェクトに変換します。この日付は' 000-01-31 'のように変換されます。日付31-12-9999のJavaでの問題
Calendar calendar = Calendar.getInstance();
calendar.set(9999, 12, 31);
infinityDate = new java.sql.Date(normalizeDate(calendar.getTime()).getTime());
私のコードはここに到達したときinfinityDateは31-12-9999 ことなく、必要があります。
if(otherDate.equals(infinityDate))
{// Do stuff}
infinityDateが何らかの理由で31から01に変更されたとして、それがあれば状態に入ることはありませんたとえotherDateが実際に'31 -12-9999 'であっても、-000になります。
otherDateが31-12-9999であることから、javaがこの日付を表すことができますが、何らかの理由でそれをカレンダーを使用して構成すると、日付が変更されます。 (otherDateはデータベースからデータを取り出すjdbcステートメントから来ます)
この参照日付'31 -12-9999 'は一部のクライアントによって修正されているため、変更することはできず、私のプログラムはいくつかのこれで到着日付の値。 誰もがこれが起こっている理由を知っていますか?私はhttp://en.wikipedia.org/wiki/Year_10,000_problemが9999年以降の日付で問題になるかもしれないことを認識していますが、1日は安全です。
EDIT:ノーマライズ日付方式のみ
private static java.util.Date normalizeDate(java.util.Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
date = calendar.getTime();
return date;
}
「その日の深夜に与えられた日付を正規化」しかし、私は日付を正規化する前に、この問題が登場して、私が解決しようとする試みでそれを正規化この。
normalizeDate関数の機能は何ですか? – Brigham
このような「マーカー」日付を使用しないことをお勧めします。それは無関係の論理を表現する壊れやすい方法です。 –
@Ramhound私が指摘したように、私の選択ではなく、これは私が受け取った要求仕様の一部です。 – angryInsomniac