我被分配了一项任务来计算 2 个给定日期之间的天数,并发现输入行 3 的结果非常奇怪(2127 天),这似乎是正确的,但该任务预期的给定输出是不同的结果(1979天)。我看过这篇文章计算两个日期之间的天数以及这里的其他几篇文章,并按照建议使用 Joda 库,得到 2127 天的结果。
*问题:给定两个日期(包括 1901 年和 2999 年),求两个日期之间的天数。
输入:六组数据。每组有两个日期,格式为月、日、年。例如,输入行 '6, 2, 1983, 6, 22, 1983' 表示 1983 年 6 月 2 日至 1983 年 6 月 22 日。
输出:给定日期之间的天数,不包括开始日期和结束日期。例如,从 1983 年 6 月 2 日到 1983 年 6 月 22 日有 19 天;即 6 月 3 日、4 日、...、21 日。
样本输入(3 组):
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
这是我的解决方案
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;
}
已解决 - 似乎测试数据是错误的,因为1, 3, 1989, 8, 3, 1983
产生了 1979 天。