On m'a donné une tâche pour calculer le nombre de jours entre 2 dates données et j'ai trouvé un résultat vraiment étrange (2127 jours) pour la ligne d'entrée 3 qui semble être correcte mais la sortie donnée attendue pour cette tâche est un résultat différent (1979 jours). J'ai regardé cet article Calculate the number of days between two dates ainsi que plusieurs autres messages ici et utilisé la bibliothèque Joda comme conseillé et obtenir un résultat de 2127 jours.Jours entre 2 dates données
* Problème: Étant donné deux dates (au cours des années 1901 et 2999, inclusivement), trouvez le nombre de jours entre les deux dates.
Entrée: Six ensembles de données. Chaque ensemble a deux dates au format mois, jour, année. Par exemple, la ligne d'entrée '6, 2, 1983, 6, 22, 1983' représente 2 Juin 1983 au 22 Juin, 1983.
Sortie: Le nombre de jours entre les dates indiquées, à l'exception du départ date et la date de fin. Par exemple, il y a 19 jours entre le 2 juin 1983 et le 22 juin 1983; à savoir, le 3 Juin, 4, ..., 21.
entrée de l'échantillon (3 sets):
Input Line #1: 6, 2, 1983, 6, 22, 1983
Output #1: 19
Input Line #2: 7, 4, 1984, 12, 25, 1984
Output #2: 173
Input Line #3: 1, 3, 1989, 3, 8, 1983
Output #3: 1979
Voici ma solution
private boolean isYearValid(int year){
return year >=1901 && year <= 2999;
}
public int numOfDays(String dates){
Calendar date1 = new GregorianCalendar();
Calendar date2 = new GregorianCalendar();
String [] dateSplit = dates.split(",");
int len = dateSplit.length;
int year = 0;
for(int i=0;i<len;i++){
dateSplit[i]=dateSplit[i].trim();
if(i==2||i==5){
try {
year = Integer.parseInt(dateSplit[i]);
}
catch (NumberFormatException e){
throw new IllegalArgumentException(String.format("Usage: Year input %s is not valid",dateSplit[i]));
}
if(!isYearValid(year))
throw new IllegalArgumentException("Usage: Year of date should be between the years 1901 and 2999, inclusive");
}
}
int [] d = new int[6];
for(int i=0;i<6;i++)
try {
d[i]=Integer.parseInt(dateSplit[i]);
}
catch(NumberFormatException e){
throw new IllegalArgumentException("Usage: Date entered is not valid");
}
date1.set(d[2], d[0],d[1]);
date2.set(d[5], d[3], d[4]);
long milli1= date1.getTimeInMillis();
long milli2 = date2.getTimeInMillis();
long diff;
if(milli1>milli2){
diff = milli1 - milli2;
}
else{
diff = milli2 - milli1;
}
return (int) (diff/(24 * 60 * 60 * 1000))-1;
}
Résolu - On dirait que les données de test a été mal depuis 1, 3, 1989, 8, 3, 1983
produit 1979 jours.
Est-ce que ce travail est fait? – bvulaj
C'est un exercice qui m'a été donné mais je pense que j'ai peut-être résolu le problème étant donné que 1, 3, 1989, 8, 3, 1983 produit 1979 jours. On dirait que les données de test qui m'ont été données étaient incorrectes. – unleashed
Autre chose dont je ne suis pas sûr que vous teniez compte, le [Calendar.set (int, int, int)] (http://docs.oracle.com/javase/1.4.2/docs/api/java /util/Calendar.html#set%28int,%20int,%20int%29) prend un mois qui commence à '0'. Donc Juin est '5'. –