¿Cómo puedo verificar si una fecha se encuentra entre otras dos fechas, en el caso de que las tres fechas estén representadas por instancias de java.util.Date
?¿Cómo puedo determinar si una fecha se encuentra entre dos fechas en Java?
Respuesta
Si no se conoce el orden del mínimo/máximo valores
Date a, b; // assume these are set to something
Date d; // the date in question
return a.compareTo(d) * d.compareTo(b) > 0;
Si desea que el rango para ser incluido
return a.compareTo(d) * d.compareTo(b) >= 0;
así:
Date min, max; // assume these are set to something
Date d; // the date in question
return d.compareTo(min) >= 0 && d.compareTo(max) <= 0;
Usted puede utilizar en lugar de >
>=
<
y en lugar de <=
para excluir a los criterios de valoración de la sensación de "entre".
Gracias por su respuesta inmediata. –
Esto no siempre funciona. He tenido problemas al usar los objetos compareTo on Date. El 1 de enero de 2006 aparentemente fue después del 1 de abril de 2006 en uno de mis programas. – KitsuneYMG
@KitsuneYMG: Intenté con el siguiente código y estoy trabajando como esperaba: 'Date date1 = new Date (2006, 1, 1); // Jan 1,2006 Date date2 = new Date (2006, 4, 1); // 1 de abril de 2006 System.out.println (date1.compareTo (date2)); // -1 System.out.println (date2.compareTo (date1)); // 1'. ¿Puedes compartir aquí qué es eso * que no funciona * para ti? – Gnanam
Esto podría ser un poco más legible:
Date min, max; // assume these are set to something
Date d; // the date in question
return d.after(min) && d.before(max);
Un muy saludable 9 segundos más rápido, señor. –
entre puede incluir los puntos finales, en cuyo caso podría usar return! D.antes de (min) &&! D.after (max); –
@Tetsujin no Oni, lo siento, es una buena cosa. No tengo un gran producto en un par de semanas que sea ayudado y herido por SO. :) –
puede utilizar getTime()
y comparar los valores de tiempo UTC devueltos.
EDITAR si está seguro de que no tendrá que lidiar con fechas anteriores a 1970, no está seguro de cómo se comportará en ese caso.
Otra opción
min.getTime() <= d.getTime() && d.getTime() <= max.getTime()
Es posible que desee echar un vistazo a Joda Time que es una muy buena API para tratar con fecha/hora. Aunque realmente no lo necesita para la solución a su pregunta actual, seguramente le ahorrará dolor en el futuro.
Sí, mi pensamiento inmediato fue sugerir el momento Joda, pero no puedo ver nada en la API para apoyar una prueba "dentro del rango". ¿Alguien mas? – dukedave
No estoy sugiriendo a Joda para este problema en particular, ya que ya tiene numerosas soluciones. – willcodejavaforfood
Pero crearía un intervalo en Joda Time para hacer esto – willcodejavaforfood
import java.util.Date;
public class IsDateBetween {
public static void main (String[] args) {
IsDateBetween idb=new IsDateBetween("12/05/2010"); // passing your Date
}
public IsDateBetween(String dd) {
long from=Date.parse("01/01/2000"); // From some date
long to=Date.parse("12/12/2010"); // To Some Date
long check=Date.parse(dd);
int x=0;
if((check-from)>0 && (to-check)>0)
{
x=1;
}
System.out.println ("From Date is greater Than ToDate : "+x);
}
}
Este es un hermoso código, esta es quizás una de las mejores funciones que he visto. Me ayudó mucho. ¡Gracias! – Bassiuz
Aquí van:
public static void main(String[] args) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
String oeStartDateStr = "04/01/";
String oeEndDateStr = "11/14/";
Calendar cal = Calendar.getInstance();
Integer year = cal.get(Calendar.YEAR);
oeStartDateStr = oeStartDateStr.concat(year.toString());
oeEndDateStr = oeEndDateStr.concat(year.toString());
Date startDate = sdf.parse(oeStartDateStr);
Date endDate = sdf.parse(oeEndDateStr);
Date d = new Date();
String currDt = sdf.format(d);
if((d.after(startDate) && (d.before(endDate))) || (currDt.equals(sdf.format(startDate)) ||currDt.equals(sdf.format(endDate)))){
System.out.println("Date is between 1st april to 14th nov...");
}
else{
System.out.println("Date is not between 1st april to 14th nov...");
}
}
Aquí hay un par de maneras de hacerlo usando el Joda-Time 2.3 biblioteca.
Una forma es utilizar los métodos simples isBefore
y isAfter
en instancias DateTime. Por cierto, DateTime en Joda-Time es similar en concepto a java.util.Date (un momento en el tiempo en la línea de tiempo del universo) pero incluye una zona horaria.
Otra forma es crear un intervalo en Joda-Time. El método contains
prueba si un DateTime dado ocurre dentro del lapso de tiempo cubierto por el Intervalo. El comienzo del intervalo es inclusivo, pero el punto final es exclusivo. Este enfoque se conoce como "Medio abierto", simbólicamente [)
.
Vea ambas formas en el siguiente ejemplo de código.
Convierta las instancias de java.util.Date a instancias de Joda-Time DateTime
. Simplemente pase la instancia de Date al constructor de DateTime. En la práctica, también debe pasar un objeto específico DateTimeZone
en lugar de confiar en la zona horaria predeterminada de JVM.
DateTime dateTime1 = new DateTime(new java.util.Date()).minusWeeks(1);
DateTime dateTime2 = new DateTime(new java.util.Date());
DateTime dateTime3 = new DateTime(new java.util.Date()).plusWeeks(1);
Comparación de pruebas para antes/después ...
boolean is1After2 = dateTime1.isAfter(dateTime2);
boolean is2Before3 = dateTime2.isBefore(dateTime3);
boolean is2Between1And3 = ((dateTime2.isAfter(dateTime1)) && (dateTime2.isBefore(dateTime3)));
Utilizando el enfoque de intervalo en lugar de isAfter/isBefore ...
Interval interval = new Interval(dateTime1, dateTime3);
boolean intervalContainsDateTime2 = interval.contains(dateTime2);
volcado a la consola ...
System.out.println("DateTimes: " + dateTime1 + " " + dateTime1 + " " + dateTime1);
System.out.println("is1After2 " + is1After2);
System.out.println("is2Before3 " + is2Before3);
System.out.println("is2Between1And3 " + is2Between1And3);
System.out.println("intervalContainsDateTime2 " + intervalContainsDateTime2);
Cuando se ejecuta ...
DateTimes: 2014-01-22T20:26:14.955-08:00 2014-01-22T20:26:14.955-08:00 2014-01-22T20:26:14.955-08:00
is1After2 false
is2Before3 true
is2Between1And3 true
intervalContainsDateTime2 true
Así es como para saber si hoy es entre 2 meses:
private boolean isTodayBetween(int from, int to) {
if (from < 0 || to < 0 || from > Calendar.DECEMBER || to > Calendar.DECEMBER) {
throw new IllegalArgumentException("Invalid month provided: from = " + from + " to = " + to);
}
Date now = new Date();
GregorianCalendar cal = new GregorianCalendar();
cal.setTime(now);
int thisMonth = cal.get(Calendar.MONTH);
if (from > to) {
to = to + Calendar.DECEMBER;
thisMonth = thisMonth + Calendar.DECEMBER;
}
if (thisMonth >= from && thisMonth <= to) {
return true;
}
return false;
}
y llamar así:
isTodayBetween(Calendar.OCTOBER, Calendar.MARCH)
Entre fechas Incluyendo los criterios de valoración se puede escribir como
public static boolean isDateInBetweenIncludingEndPoints(final Date min, final Date max, final Date date){
return !(date.before(min) || date.after(max));
}
- 1. Verificar una fecha es entre dos fechas en Java
- 2. Determinar si la fecha de hoy se encuentra en un rango de dos fechas en IOS
- 3. determinar si el rango de fechas se encuentra entre otro rango de fechas - sql
- 4. encuentra la diferencia entre dos fechas en segundos
- 5. Cómo generar una fecha aleatoria entre dos fechas usando php?
- 6. genarate fechas entre dos fecha en android
- 7. ¿Cómo puedo encontrar el número de años entre dos fechas?
- 8. ¿Cómo generar una fecha y hora aleatorias entre dos fechas?
- 9. ¿Cómo puedo determinar si dos polígonos convexos se cruzan?
- 10. ¿Cómo puedo encontrar la diferencia entre dos fechas usando Javascript
- 11. Matriz de fechas entre dos fechas
- 12. Seleccionar fecha entre dos columnas
- 13. Cómo determinar si dos sectores circulares se superponen entre sí
- 14. Diferencia en el tiempo entre dos fechas en Java
- 15. Seleccionar registros entre dos fechas en dos columnas
- 16. ¿Cómo saber si una conexión TCP se encuentra entre dos procesos en la misma máquina?
- 17. SELECCIONAR filas MySQL donde la fecha de hoy se encuentra entre dos columnas FECHA
- 18. Diferencia entre dos fechas en Python
- 19. Cómo determinar si el valor es una fecha en PHP
- 20. Cómo determinar si una fecha está antes de otra
- 21. ¿Cómo puedo determinar si una fecha determinada es el N ° día entre semana del mes?
- 22. Suma dos fechas en Java
- 23. ¿Cómo obtengo la diferencia entre dos fechas en JavaScript?
- 24. Comparar dos fechas en Java
- 25. Usando Joda, ¿cómo puedo determinar si una fecha dada se encuentra entre el tiempo xy una vez 3 horas antes que x?
- 26. ¿Cómo puedo calcular el número de años entre dos fechas?
- 27. ¿Manera fácil de probar si cada elemento en una matriz numpy se encuentra entre dos valores?
- 28. ¿Cuántos segundos entre dos fechas?
- 29. ¿Cómo contar días entre dos fechas en PHP?
- 30. Cómo determinar si el cumpleaños o el aniversario se produjo durante el intervalo de fechas
Funciona, pero no se puede leer. Gracias de cualquier manera. –
@BrunoDeFreitasBarros ¿A qué te refieres con "no legible"? –
@ Peter Lawrey Bruno significa que es difícil entender el código sin comentarios. – Mirimas