Necesito comprobar si la fecha dada es después de hoy 23:59:59, ¿cómo puedo crear el objeto de fecha que es hoy 23:59:59?Fecha de vencimiento hoy en Java
Respuesta
Uso java.util.Calendar:
Calendar cal = Calendar.getInstance(); // represents right now, i.e. today's date
cal.set(Calendar.HOUR_OF_DAY, 23);
cal.set(Calendar.MINUTE, 59);
cal.set(Calendar.SECOND, 59);
cal.set(Calendar.MILLISECOND, 999); // credit to f1sh
Date date = cal.getTime();
creo que podría estar acercando poco esto desde el ángulo equivocado, sin embargo. En lugar de tratar de crear una instancia de fecha que sea un átomo antes de la medianoche, un mejor enfoque podría ser crear la fecha que representa la medianoche y probar si la hora actual es estrictamente menos que ella. Creo que esto sería un poco más claro en cuanto a tus intenciones para que alguien más lea el código también.
Alternativamente, se puede utilizar una API Fecha de terceros que sabe cómo convertir de nuevo a la fecha. La API de fecha incorporada de Java generalmente se considera deficiente de muchas maneras. No recomendaría usar otra biblioteca solo para hacer esto, pero si tiene que hacer muchas manipulaciones de fecha y/o ya está usando una biblioteca como Joda Time, podría expresar este concepto de manera más simple. Por ejemplo, Joda Time tiene una clase DateMidnight
que permite una comparación mucho más fácil con las fechas "en bruto" del tipo que estás haciendo, sin la posibilidad de problemas sutiles (como no configurar los milisegundos en mi primer corte).
Con respecto a 'Calendar.getInstance()': tenga en cuenta que el 'Calendario' devuelto también contiene el valor actual durante milisegundos. No sabía eso y recientemente me llevó un día entero descubrir por qué 'igual()' siempre devolvía falso. – f1sh
Buen punto f1sh: quizás el enfoque aquí sea un poco erróneo, vea próxima edición. –
Solo incluya: cal.set (Calendario.MILLISECOND, 0); // o 999 –
Uso del
Date.before(Date) o Date.after (Fecha)
Calendar c = Calendar.getInstance();
c.set(Calendar.HOUR_OF_DAY, 23);
c.set(Calendar.SECOND, 59);
c.set(Calendar.MINUTE, 59);
Date d = c.getTime()
Date x = // other date from somewhere
x.after(d);
Encuentra la fecha de mañana convertirlo en milisegundos se obtiene un valor de largo . resta -1 de ella y vuelve a convertir a la fecha en que obtendrás la fecha requerida.
ex: 12:00:00 de mañana lo convierten en milisegundos. obtendrá como mucho valor 312313564774 restar -1 obtendrá el tiempo EOD hoy en milisegundos
Esto crea una fecha en el futuro y lo compara con la fecha actual (establecido a finales de la tarde). Debería considerar usar la Biblioteca de tiempo Joda.
long timeStampOfTomorrow = new Date().getTime() + 86400000L;
Date dateToCheck = new Date(timeStampOfTomorrow);
Calendar today = Calendar.getInstance();
today.set(Calendar.HOUR_OF_DAY, 23);
today.set(Calendar.MINUTE, 59);
today.set(Calendar.SECOND, 59);
today.set(Calendar.MILLISECOND, 999);
boolean isExpired = dateToCheck.after(today.getTime());
Con Joda Time Library puede hacer esto más legible. Un ejemplo fácil se puede encontrar en el project website.
public boolean isRentalOverdue(DateTime datetimeRented) {
Period rentalPeriod = new Period().withDays(2).withHours(12);
return datetimeRented.plus(rentalPeriod).isBeforeNow();
}
Supongo que usted quiso decir "es el dado java.util.Date después de hoy?".
Si es así, no se preocupe por determinar el último momento del día; eso es impracticable debido a la fraccion de segundo. Es mejor enfocarse solo en la fecha, sin la hora del día. Desea saber si la fecha del momento es posterior a la fecha del momento actual. Una zona horaria es crucial aquí.
tl; dr
ZoneId z = ZoneId.of(“America/Montreal”); // Time zone determines date.
Boolean givenMomentIsAfterToday = myUtilDate.toInstant().atZone(z).toLocalDate().isAfter(LocalDate.now(z));
detalles
Está utilizando clases de fecha y hora viejos molestos ahora suplantado por las clases java.time.
Primero, convierta el dado java.util.Date
en un Instant
.Encuentre nuevos métodos de conversión agregados a las clases antiguas para convertir a/desde tipos java.time.
Instant
La clase Instant
representa un momento en la línea de tiempo en UTC con una resolución de nanoseconds.
Instant instant = myUtilDate.toInstant();
LocalDate
La clase LocalDate
representa un valor de sólo fecha sin la hora del día y sin zona horaria.
Una zona horaria es crucial para determinar una fecha. Para cualquier momento dado, la fecha varía alrededor del mundo por zona. Por ejemplo, unos minutos después de la medianoche en París, Francia es un nuevo día cuando todavía está "ayer" en Montreal Québec.
ZoneId z = ZoneId.of(“America/Montreal”);
LocalDate today = LocalDate.now(z);
ZonedDateTime
Ajustar el instante en la misma zona horaria para la comparación de fechas.
ZonedDateTime zdt = instant.atZone(z);
Interrogue por el valor de solo fecha, a LocalDate
.
LocalDate ldt = zdt.toLocalDate();
Por último, compare los objetos LocalDate
.
Boolean givenMomentIsAfterToday = ldt.isAfter(today);
Sobre java.time
El marco java.time está incorporado en Java 8 y versiones posteriores. Estas clases suplantan a las antiguas clases problemáticas de fecha y hora como java.util.Date
, .Calendar
, & java.text.SimpleDateFormat
. El proyecto Joda-Time, ahora en maintenance mode, recomienda la migración a java.time.
Para obtener más información, consulte el Oracle Tutorial. Y busque Stack Overflow para obtener muchos ejemplos y explicaciones.
Gran parte de la funcionalidad java.time está de vuelta-portado a Java 6 & 7 en ThreeTen-Backport y adaptado además para Android en ThreeTenABP (ver How to use…).
El proyecto ThreeTen-Extra amplía java.time con clases adicionales. Este proyecto es un terreno de prueba para posibles adiciones futuras a java.time. Puede encontrar algunas clases útiles aquí, como Interval
, YearWeek
, YearQuarter
, y más.
- 1. Fecha de aritmética en Java, agregando 3 meses a partir de hoy
- 2. PHP: Fecha de "Yesterday", "Hoy"
- 3. C# asp.net: Fecha de vencimiento de la cookie en Chrome
- 4. jQuery datepicker - cambiar la fecha de "hoy"?
- 5. ¿Comparando resultados con la fecha de hoy?
- 6. ¿cómo agrego una fecha de vencimiento a una etiqueta img?
- 7. PostgreSQL, verificando la fecha relativa al "hoy"
- 8. MySQL Seleccionar fecha igual a hoy
- 9. oráculo fecha sql a más tardar hoy
- 10. ¿Cómo saber si la fecha es hoy?
- 11. ¿Cómo puedo obtener la fecha judía de hoy en C#?
- 12. fecha igual o mayor que el de hoy en MySQL
- 13. ¿Cómo se obtiene el rango de fecha/hora para "hoy" usando la biblioteca de fecha/hora de Joda en Java?
- 14. Obtener la fecha de vencimiento de las suscripciones en la aplicación Google Play
- 15. sas fecha - convierta hoy() en el formato aaaammdd
- 16. ¿Cómo restar 4 meses de la fecha de hoy?
- 17. C# 30 días a partir de la fecha de hoy
- 18. iPhone, ¿cómo configuro la fecha mínima de mis selectores de fecha para hoy en el código?
- 19. Selenium IDE: ¿Cómo obtengo la fecha de hoy?
- 20. iOS 5 - Configurar la fecha mínima de UIDatePicker para "hoy"
- 21. WPF DatePicker predeterminado a la fecha de hoy
- 22. Anterior fecha lunes y anteriores domingos basado en Fecha de hoy
- 23. Vencimiento de Scala-LLVM?
- 24. Código de Javascript para mostrar la fecha de ayer y la fecha de hoy
- 25. ¿Cómo verificar si la fecha de entrada es igual a la fecha de hoy?
- 26. Django Quiero imprimir la fecha y la hora para hoy
- 27. Cómo establecer la fecha de vencimiento de la cookie en AngularJS
- 28. En Redis, ¿cómo obtengo la fecha de vencimiento de una clave?
- 29. Vencimiento de App Store Provisioning Profile
- 30. SELECCIONAR filas MySQL donde la fecha de hoy se encuentra entre dos columnas FECHA
¿Quiere decir en o después de mañana a la medianoche? ¿O está interesado en el segundo entre 23:59:59 y 00:00:00? –