Подтвердить что ты не робот

Лучший способ получить максимальное значение даты в java?

Я пишу немного логики, которая требует обработки нулевых дат как значения навсегда в будущем (дата, о которой идет речь, является датой истечения срока действия, которая может существовать или не существовать). Вместо того, чтобы вводить особые случаи для нулевой даты во всем коде, я хочу просто преобразовать null в максимально возможную дату. Я не вижу никаких очевидных способов получить такую ​​ценность без жесткого кодирования. Каков наилучший способ получить максимальное значение любой реализации даты?

4b9b3361

Ответ 1

Try

new Date(Long.MAX_VALUE)

который должен дать вам самое длинное возможное значение даты в Java.

Ответ 2

Инкапсулируйте нужные функции в своем классе, используя Long.MAX_VALUE, скорее всего, вызовет проблемы.

class ExpirationDate {
    Date expires;

    boolean hasExpiration() {
        return expires == null;
    }

    Date getExpirationDate() {
        return expires;
    } 

    boolean hasExpired(Date date) {
        if (expires == null) {
            return true;
        } else {
            return date.before(expires);
        }
    }

    ...
}

Ответ 3

+1 к предложениям Long.MAX_VALUE. Похоже, что это поможет вам, если вы отсортируете материал по полю даты.

Однако вместо того, чтобы строить дату из некоторого большого значения константы, когда вам нужна дата, используйте глобально видимый синглтон для хранения экземпляра Date, который представляет ваше специальное значение:

class DateUtil
{
  public static final Date NO_EXPIRE = new Date( Long.MAX_VALUE );
}

Затем вы можете использовать простое сравнение идентичности (mydate == DateUtils.NO_EXPIRE), чтобы проверить, имеет ли конкретная дата ваш специальный случай вместо obj.equals(); (т.е. mydate.equals(DateUtils.NO_EXPIRE);)

Ответ 4

Вот что я делаю:

public static final TimeZone UTC;

// 0001.01.01 12:00:00 AM +0000
public static final Date BEGINNING_OF_TIME;

// new Date(Long.MAX_VALUE) in UTC time zone
public static final Date END_OF_TIME;

static
{
    UTC = TimeZone.getTimeZone("UTC");
    final Calendar c = new GregorianCalendar(UTC);
    c.set(1, 0, 1, 0, 0, 0);
    c.set(Calendar.MILLISECOND, 0);
    BEGINNING_OF_TIME = c.getTime();
    c.setTime(new Date(Long.MAX_VALUE));
    END_OF_TIME = c.getTime();
}

Обратите внимание, что если TimeZone NOT UTC, вы получите смещение с "конца времени", которое не будет максимальным. Они особенно полезны для вставки в поля базы данных и отсутствия нулевых дат.

Ответ 5

Вы считали, что используете Joda Time?

Он будет включен в java 7 в качестве основы для JSR-310

Функция, которая может вас заинтересовать, ZeroIsMaxDateTimeField который в основном свопирует нулевые поля для максимального значения для этого поля в течение даты.

Ответ 6

Одна из проблем, которую я вижу, заключается в том, что для сортировки по дате истечения срока действия использование null не просто сортируется. Поэтому может потребоваться замена фактическим значением (даже если это произвольное значение часового пояса в будущем).

Я предполагаю, что другой способ лечения "без истечения срока действия" - просто сказать, что в будущем истекает 100 лет... Если ваша база данных не связана с долгосрочными контрактами!

Ответ 7

С Java SE 8 вы можете использовать:

LocalDate.MAX

Ответ 8

Возможно, один из вариантов - использовать максимальную системную дату. Вы можете получить его, используя:

System.out.println(new Date(Long.MAX_VALUE).toString())
//Output:
//Sun Aug 17 12:42:55 IST 292278994