Diferencia de días entre dos fechas
Java
Publicado el 20 de Septiembre del 2016 por Xve (294 códigos)
124.258 visualizaciones desde el 20 de Septiembre del 2016
Este simple código muestra como obtener los días de diferencia entre dos fechas dadas.
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class test {
public static void main(String[] args) throws ParseException {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date fechaInicial=dateFormat.parse("2016-02-14");
Date fechaFinal=dateFormat.parse("2016-03-22");
int dias=(int) ((fechaFinal.getTime()-fechaInicial.getTime())/86400000);
System.out.println("Hay "+dias+" dias de diferencia");
}
}
Comentarios sobre la versión: Versión 1.0 (19)
Como nota: 1 Día = 86,400,000 Milisegundos
Saludos¡¡¡
public String validarFecha() {
boolean validar = false;
int dia;
int mes = 0;
int año;
int checkdia;
int checkmes;
int checks;
do {
checkdia = 0;
checkmes = 0;
checks = 0;
dia = Integer.parseInt((String) JOptionPane.showInputDialog(null, textocuerpodia, textocabecera, JOptionPane.QUESTION_MESSAGE, null, listadias, listadias[0]));
String mesletra = (String) JOptionPane.showInputDialog(null, textocuerpomes, textocabecera, JOptionPane.QUESTION_MESSAGE, null, listameses, listameses[0]);
año = Integer.parseInt((String) JOptionPane.showInputDialog(null, textocuerpoaño, textocabecera, JOptionPane.QUESTION_MESSAGE, null, listaaños, listaaños[0]));
if (mesletra.equals("Enero") || mesletra.equals("Marzo") || mesletra.equals("Mayo") || mesletra.equals("Julio") || mesletra.equals("Agosto") || mesletra.equals("Octubre") || mesletra.equals("Diciembre")) {
if (dia <= 31) {
checkdia++;
}
} else if (mesletra.equals("Abril") || mesletra.equals("Junio") || mesletra.equals("Septiembre") || mesletra.equals("Noviembre")) {
if (dia <= 30) {
checkdia++;
}
} else if (mesletra.equals("Febrero")) {
if (año % 4 == 0 && año % 100 != 0 || año % 400 == 0) {
if (dia <= 29) {
checkdia++;
}
} else {
if (dia <= 28) {
checkdia++;
}
}
}
for (int i=0; i<listameses.length; i++) {
if (listameses[i].equals(mesletra)) {
mes = i+1;
}
}
if (mes <= 12 && mes> 0) {
checkmes++;
}
checks = checkdia + checkmes;
if (checks == 2) {
JOptionPane.showMessageDialog(null, "La fecha es correcta", textocabecera, 1);
validar = true;
}
else
{
JOptionPane.showMessageDialog(null, "La fecha es incorrecta", textocabecera, 1);
validar = false;
}
} while (validar == false);
return (año + "-" + mes + "-" + dia);
}
hay que contar que hay arrays con listas, textos... etc.
Saludos
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
import java.util.StringTokenizer;
public class CalDias {
public static void main(String[] args) throws ParseException {
//* Definimos la variable para almacenar la fecha menor
String D_FEC_INI = "";
//* Definimos la variable para almacenar la fecha mayor
String D_FEC_FIN = "";
//* Definimos la variable para almacenar la fecha a verificar
String VERIF_FECHA = "";
//* Limpiamos la pantalla. Ya que no existe comando, instertamos lineas en blanco a la consola
for (int i=0; i<200;i++)
System.out.println();
//* Se define el formato de las fechas
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
//* Bienvenida al programa
System.out.println ("*------------------------------------------*");
System.out.println (" BIENVENIDO AL CALCULO DE DIAS ENTRE FECHAS ");
System.out.println ("*------------------------------------------*");
//* Solicitamos la fecha
System.out.println ("Introduzca Fecha Inicial (en formato YYYY-MM-DD) :");
//* Aceptamos la fecha introducida por pantalla
Scanner entradaEscaner = new Scanner (System.in);
//* Movemos la fecha a la variable definida
D_FEC_INI = entradaEscaner.nextLine ();
//* Verificamos el formato de la variable si se corresponde con YYYY-MM-DD
Date fechaInicial=dateFormat.parse(D_FEC_INI);
//* Llamamos al procedimiento de verificacion de fechas
verificar(D_FEC_INI);
//* Solicitamos la segunda fecha
System.out.println ("Introduzca Fecha Final (en formato YYYY-MM-DD) :");
//* Movemos la segunda fecha a la variable definida
D_FEC_FIN = entradaEscaner.nextLine ();
//* Verificamos el formato de la variable si se corresponde con YYYY-MM-DD
Date fechaFinal=dateFormat.parse(D_FEC_FIN);
//* Llamamos al procedimiento de verificacion de fechas
verificar(D_FEC_FIN);
//* Se calcula el numero de dias entre las dos fechas
int dias=(int) ((fechaFinal.getTime()-fechaInicial.getTime())/86400000);
//* Linea en blanco
System.out.println("");
//* Se muestra por pantalla el resultado de la operacion
System.out.println("Entre el "+D_FEC_INI+" y el "+D_FEC_FIN+" existen "+dias+" dias de diferencia");
}
private static void verificar(String VERIF_FECHA){
System.out.println("");
System.out.println("Verificamos la fecha enviada "+VERIF_FECHA);
String DATA[] = VERIF_FECHA.split("-");
String DIA = DATA[2];
String MES = DATA[1];
String ANY = DATA[0];
System.out.println("DIA: "+DIA);
System.out.println("MES :"+MES);
System.out.println("ANY :"+ANY);
System.out.println("");
switch(MES){
case "01":
case "03":
case "05":
case "07":
case "08":
case "10":
case "12":
if (Integer.valueOf(DIA) >= 1 && Integer.valueOf(DIA) <= 31)
break;
else
System.out.println("La fecha "+VERIF_FECHA+" es incorrecta. El mes "+MES+" no tiene dia "+DIA+". La operacion no sera correcta");
System.out.println("FINALIZAMOS EL PROGRAMA ANTES DE TIEMPO POR ERROR DE DATOS A LA ENTRADA");
System.exit(0);
break;
case "04":
case "06":
case "09":
case "11":
if (Integer.valueOf(DIA) >= 1 && Integer.valueOf(DIA) <= 30)
break;
else
System.out.println("La fecha "+VERIF_FECHA+" es incorrecta. El mes "+MES+" no tiene dia "+DIA+". La operacion no sera correcta");
System.out.println("FINALIZAMOS EL PROGRAMA ANTES DE TIEMPO POR ERROR DE DATOS A LA ENTRADA");
System.exit(0);
break;
case "02":
if (Integer.valueOf(DIA) >= 1 && Integer.valueOf(DIA) <= 29)
break;
else
System.out.println("La fecha "+VERIF_FECHA+" es incorrecta. El mes "+MES+" no tiene dia "+DIA+". La operacion no sera correcta");
System.out.println("FINALIZAMOS EL PROGRAMA ANTES DE TIEMPO POR ERROR DE DATOS A LA ENTRADA");
System.exit(0);
break;
default:
System.out.println("En mes "+MES+" no existe. Los calculos no seran correctos");
System.out.println("FINALIZAMOS EL PROGRAMA ANTES DE TIEMPO POR ERROR DE DATOS A LA ENTRADA");
System.exit(0);
}
}
}
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
public class test {
public static void main(String[] args) throws ParseException {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
//Hay que añadir esto y ya es correcto, sin esto falla para las fechas indicadas
//En el ejemplo porque entre el 25 y el 26 hay 23 horas y no 24
dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
Date fechaInicial=dateFormat.parse("2018-03-25");
Date fechaFinal=dateFormat.parse("2018-03-26");
int dias=(int) ((fechaFinal.getTime()-fechaInicial.getTime())/86400000);
System.out.println("Hay "+dias+" dias de diferencia");
}
}
Tengo una duda, y no se si alguien me puede ayudar.
Necesito un código de restar dos fechas, que no sea Date sino Fecha. Debe funcionar con classes Fecha ya creadas, y que sea static.¿Alguien tiene alguno o sabe como puede ayudarme?
Llevo ya 3 semanas con lo mismo, probando y refactorizando códigos, y ya no se que más puedo hacer. Por favor, si alguien tiene alguna idea, se lo agradezco. Gracias de antemano.
Dejo una breve explicación del proyecto por si puede ayudar:
Estoy creando en Eclipse con Java una app para un Hotel. En ella, se pide al usuario que escriba la fecha de entrada y de salida, mediante dos funciones class.
Para sacar el número de días que van a estar hospedados, he recalculado el atributo, pero para ello, necesito restar las dos fechas pedidas para que me diga exactamente cuántos días hay entre la fecha de inicio y la de fin. Y aquí es dónde falla todo, porque no tengo un restafechas adecuado, y tampoco se cómo hacerlo, porque aún soy novata...