variable validas validar una que otra operaciones obtener metodos mayor hora fechas fecha declarar con como clase actual java datetime

validas - ¿La mejor manera de obtener el valor máximo de la fecha en java?



obtener fecha y hora actual java (7)

¿Has considerado adoptar el uso de Joda Time ?

Está programado para ser incluido en java 7 como base para JSR-310

La característica que puede interesarle es ZeroIsMaxDateTimeField que básicamente intercambia cero campos por el valor máximo para ese campo dentro de la fecha y hora.

Estoy escribiendo un poco de lógica que requiere tratar fechas nulas para siempre en el futuro (la fecha en cuestión es una fecha de vencimiento, que puede existir o no). En lugar de incluir casos especiales para una fecha nula en todo el código, quiero convertir null en la Fecha máxima posible. No veo ninguna manera obvia de obtener tal valor sin una codificación difícil. ¿Cuál es la mejor manera de obtener el valor máximo de cualquier implementación de fecha que se esté utilizando?


+1 a las sugerencias Long.MAX_VALUE. Parece que esto te ayudaría si clasificas cosas por tu campo de fecha.

Sin embargo, en lugar de construir una fecha a partir del valor constante grande donde necesite la fecha, use un singleton visible globalmente para contener una instancia de Fecha que represente su valor especial:

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

Luego puede usar la comparación de identidad simple (mydate == DateUtils.NO_EXPIRE) para probar si una fecha particular es de su caso especial en lugar de obj.equals (); (es decir, mydate.equals (DateUtils.NO_EXPIRE);)


Encapsule la funcionalidad que desee en su propia clase, utilizando Long.MAX_VALUE muy probablemente le cause problemas.

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); } } ... }


Esto es lo que hago:

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(); }

Tenga en cuenta que si TimeZone NO es UTC, obtendrá compensaciones desde el "final del tiempo", que no serán valores máximos. Estos son especialmente útiles para insertar en los campos de la base de datos y no tener que tener fechas NULL.


Tal vez una opción es usar la fecha máxima del sistema. Puedes obtenerlo usando:

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


Tratar

new Date(Long.MAX_VALUE)

que debería darle el valor de fecha más largo posible en Java.


Un problema que veo es que para ordenar la fecha de vencimiento, usar un nulo no es fácilmente ordenable. Por lo tanto, puede ser necesario reemplazarlo con un valor real (incluso si se trata de un valor de centinela arbitrario en el futuro).

Supongo que otra forma de tratar "sin vencimiento" es simplemente decir que algo expira 100 años en el futuro ... ¡a menos que su base de datos trate con contratos a largo plazo!