Código de Java - Diferencia de días entre dos fechas

Imágen de perfil
Val: 718
Plata
Ha disminuido 1 puesto en Java (en relación al último mes)
Gráfica de Java

Diferencia de días entre dos fechasgráfica de visualizaciones


Java

estrellaestrellaestrellaestrellaestrella(12)
Publicado el 20 de Septiembre del 2016 por xve
55.195 visualizaciones desde el 20 de Septiembre del 2016. Una media de 399 por semana
Este simple código muestra como obtener los días de diferencia entre dos fechas dadas.

Versión 1.0
estrellaestrellaestrellaestrellaestrella(12)

Publicado el 20 de Septiembre del 2016gráfica de visualizaciones de la versión: Versión 1.0
55.200 visualizaciones desde el 20 de Septiembre del 2016. Una media de 399 por semana
estrellaestrellaestrellaestrellaestrella
estrellaestrellaestrellaestrella
estrellaestrellaestrella
estrellaestrella
estrella

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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 (12)

Imágen de perfil
21 de Septiembre del 2016
estrellaestrellaestrellaestrellaestrella
Excelente, Aporte
Responder
03 de Octubre del 2016
estrellaestrellaestrellaestrellaestrella
sencillo y claro
Responder
Samuel
08 de Marzo del 2017
estrellaestrellaestrellaestrellaestrella
NO EXISTE LA FECHA 31 DE ABRIL, POR LO QUE NO DEBERÍA DAR LA DIFERENCIA DE ESA FECHA RESPECTO A OTRA, EN DEFINITIVA QUE EL MÉTODO FUNCIONA MAL
Responder
Kevin Aguilar
18 de Octubre del 2017
estrellaestrellaestrellaestrellaestrella
Lo que pasa es que solo te muestra la diferencia entre tiempo (Milisegundos) transcurridos entre Dia X y dia Y, independientemente del dia del calendario que tengas... Si tienes una fecha normalizada desde antes no es necesario comprobar si existe o no la fecha.

Como nota: 1 Día = 86,400,000 Milisegundos

Saludos¡¡¡
Responder
Miguel
Hace 6d
estrellaestrellaestrellaestrellaestrella
Hay que hacer una función de comprobación antes... por ejemplo...

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.
Responder
JOSE
26 de Abril del 2017
estrellaestrellaestrellaestrellaestrella
La mejor explicación que encontré. Funciona bastante bien, ahora lo que ocupo es poder meter la fechas por teclado.

Saludos
Responder
Imágen de perfil
09 de Mayo del 2017
estrellaestrellaestrellaestrellaestrella
Aquí tienes una mejora, que permite introducir las fechas por consola así como control de errores sobre la fecha introducidas para que no se puedan dar los casos que comenta @Samuel

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);
}
}
}
Responder
marcelo
28 de Septiembre del 2017
estrellaestrellaestrellaestrellaestrella
Si usas java 1.7... lo mejor es usar lambda.. te ahorras todo esto.
Responder
tigreci
22 de Marzo del 2018
estrellaestrellaestrellaestrellaestrella
Siento deciros que el codigo es incorrecto no se tiene en cuenta fechas en dos horarios distintos es decir no se tiene en cuenta que una fecha sea horario de verano y otra horario de invierno esto para probarlo poned las fechas 25/03/2018 y 26/03/2018 os devolvera cero dias cuando deberia ser uno para corregir esto hay que usar UTC

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");

}

}
Responder
juan muñoz
14 de Mayo del 2018
estrellaestrellaestrellaestrellaestrella
Si funciona, si divides eso e 360 te da la edad de x persona editando segun la necesidad
Responder
Petrus
04 de Agosto del 2018
estrellaestrellaestrellaestrellaestrella
https://masqueprogramar.wordpress.com/2016/11/23/funcion-numero-de-dias-entre-dos-fechas-en-java/
Responder
Alexandra
09 de Abril del 2019
estrellaestrellaestrellaestrellaestrella
No ha dejado ningún comentario
Responder

Comentar la versión: Versión 1.0

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios
Es necesario revisar y aceptar las políticas de privacidad

http://lwp-l.com/s3676
Revisar política de publicidad