Quiero un programa Java que calcule días entre dos fechas.
- Escriba la primera fecha (notación alemana; con espacios en blanco: "dd mm aaaa")
- Escriba la segunda fecha.
- El programa debe calcular el número de días entre las dos fechas.
¿Cómo puedo incluir los años bisiestos y el verano?
Mi código:
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;
public class NewDateDifference {
public static void main(String[] args) {
System.out.print("Insert first date: ");
Scanner s = new Scanner(System.in);
String[] eingabe1 = new String[3];
while (s.hasNext()) {
int i = 0;
insert1[i] = s.next();
if (!s.hasNext()) {
s.close();
break;
}
i++;
}
System.out.print("Insert second date: ");
Scanner t = new Scanner(System.in);
String[] insert2 = new String[3];
while (t.hasNext()) {
int i = 0;
insert2[i] = t.next();
if (!t.hasNext()) {
t.close();
break;
}
i++;
}
Calendar cal = Calendar.getInstance();
cal.set(Calendar.DAY_OF_MONTH, Integer.parseInt(insert1[0]));
cal.set(Calendar.MONTH, Integer.parseInt(insert1[1]));
cal.set(Calendar.YEAR, Integer.parseInt(insert1[2]));
Date firstDate = cal.getTime();
cal.set(Calendar.DAY_OF_MONTH, Integer.parseInt(insert2[0]));
cal.set(Calendar.MONTH, Integer.parseInt(insert2[1]));
cal.set(Calendar.YEAR, Integer.parseInt(insert2[2]));
Date secondDate = cal.getTime();
long diff = secondDate.getTime() - firstDate.getTime();
System.out.println ("Days: " + diff / 1000 / 60 / 60 / 24);
}
}
java
date-arithmetic
usuario3025448
fuente
fuente
mm
yMM
: PRespuestas:
ACTUALIZACIÓN: La respuesta original de 2013 ahora está desactualizada porque algunas de las clases han sido reemplazadas. La nueva forma de hacerlo es usar las nuevas
java.time
clases.Tenga en cuenta que esta solución le dará la cantidad de días reales de 24 horas, no la cantidad de días calendario. Para este último, use
Respuesta original (desactualizada a partir de Java 8)
Está haciendo algunas conversiones con sus cadenas que no son necesarias. Hay una
SimpleDateFormat
clase para ello: intente esto:EDITAR: dado que ha habido algunas discusiones sobre la corrección de este código: de hecho se ocupa de los años bisiestos. Sin embargo, la
TimeUnit.DAYS.convert
función pierde precisión ya que los milisegundos se convierten en días (consulte el documento vinculado para obtener más información). Si esto es un problema,diff
también se puede convertir a mano:Tenga en cuenta que este es un
float
valor, no necesariamente unint
.fuente
String inputString1 = "28 2 2016"; String inputString2 = "1 3 2016";
ans: 2La forma más simple:
fuente
getDifferenceDays(11PM, 4 AM nextday) == 0
En Java 8, puede lograr esto usando
LocalDate
yDateTimeFormatter
. Del Javadoc deLocalDate
:Y el patrón se puede construir usando
DateTimeFormatter
. Aquí está el Javadoc y los caracteres de patrón relevantes que utilicé:Aquí está el ejemplo:
Ejemplo de entrada / salida con el último más reciente:
Con más reciente primero:
Bueno, podrías hacerlo como método de una manera más simple:
fuente
La mayoría / todas las respuestas nos causaron problemas cuando llegó el horario de verano. Aquí está nuestra solución de trabajo para todas las fechas, sin usar JodaTime. Utiliza objetos de calendario:
fuente
Calendar dayOne = (Calendar) day1.clone(), dayTwo = (Calendar) day2.clone();
líneas ya que aseguran que los valores del calendario original no se anulen. Eliminé estas líneas pensando que eran redundantes y perdí una hora por el hecho de que los valores de mi objeto original se sobrescribían desde el interior de esta función.La mejor manera, y se convierte en una Cadena como bonificación;)
fuente
Utilizar:
fuente
Las bibliotecas de fechas de Java están notoriamente rotas. Aconsejaría usar Joda Time . Se encargará del año bisiesto, la zona horaria, etc.
Ejemplo de trabajo mínimo:
fuente
withZone( DateTimeZone.forID( "Europe/Berlin" ) )
. (b) ¿Por qué usarLocalDate
en ladaysBetween
llamada? Simplemente pase los objetos DateTime (firstTime, secondTime). Para días completos, llamewithTimeAtStartOfDays
. (c) Usaría nombres de variables enfirstDateTime
lugarfirstTime
de evitar la ambigüedad entre los objetos de fecha, hora y fecha-hora. (d) Agregue algunos intentos de captura para manejar la entrada de datos erróneos que no coincide con nuestro formato esperado.fuente
Cuando ejecuto su programa, ni siquiera me lleva al punto donde puedo ingresar la segunda fecha.
Esto es más simple y menos propenso a errores.
fuente
fuente
fuente