Java 两个给定日期之间的天数
我被分配了一项任务来计算两个给定日期之间的天数,并发现输入行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套): 这是我的解决办法Java 两个给定日期之间的天数,java,algorithm,date,Java,Algorithm,Date,我被分配了一项任务来计算两个给定日期之间的天数,并发现输入行3的结果非常奇怪(2127天),这似乎是正确的,但该任务预期的给定输出是不同的结果(1979天)。我看了这篇文章和其他几篇文章,按照建议使用了Joda图书馆,结果是2127天 *问题:给定两个日期(包括1901年和2999年),找出两个日期之间的天数 输入:六组数据。每组有两个日期,格式为月、日、年。 例如,输入行'6,2,1983,6,22,1983'表示 1983年6月2日至1983年6月22日 输出:给定日期之间的天数,不包括开始
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;
}
private布尔值isYearValid(int-year){
返回年份>=1901&&year您的测试数据不正确。请参阅:。出于好奇,这是家庭作业吗?如果不是,为什么不直接使用Joda时间库来为您完成此操作。它会考虑月长、闰年等
DateTime dt1 = ...;
DateTime dt2 = ...;
Duration duration = new Duration(dt1, dt2);
long days = duration.getStandardDays();
这是给我的一个练习,但我想我可能已经解决了这个问题,因为1,3,1989,8,3,1983产生了1979天。似乎给我的测试数据是不正确的。还有一点我不确定你是否考虑到了,这个方法需要一个月的时间,从0
开始。那么六月是5
。这个答案是什么直肠应该被否决吗?请解释一下。
DateTime dt1 = ...;
DateTime dt2 = ...;
Duration duration = new Duration(dt1, dt2);
long days = duration.getStandardDays();