Java 两个日期之间的日差
2020年2月15日至2020年3月2日之间的产量为18,但我预计为16 我做错了什么Java 两个日期之间的日差,java,Java,2020年2月15日至2020年3月2日之间的产量为18,但我预计为16 我做错了什么 public void checkNumberOfDaysBetweenTwoDates(models.Date date2) { int day_diff, mon_diff, year_diff; if(date2.checkIfLegal()) { if(date2.day < day) { date2.day += date2.numbe
public void checkNumberOfDaysBetweenTwoDates(models.Date date2) {
int day_diff, mon_diff, year_diff;
if(date2.checkIfLegal()) {
if(date2.day < day) {
date2.day += date2.numberOfDaysInMonth();
}
date2.month = date2.month - 1;
}
if(date2.month < month) {
date2.month += 12;
date2.year -= 1;
}
day_diff = date2.day - day;
mon_diff = date2.month - month;
year_diff = date2.year - year;
System.out.println("days: " + day_diff + "months: " + mon_diff + "years: " + year_diff);
}
private boolean isLeapYear() {
return year % 4 == 0 &&
(year % 100 != 0 || year % 400 == 0);
}
public boolean checkIfLegal() {
boolean validation = false;
if(month < 1 || month > 12 || day < 1 || day > numberOfDaysInMonth()) {
validation = false;
} else {
validation = true;
}
return validation;
}
private int numberOfDaysInMonth() {
if (month == 2 && isLeapYear())
return 29;
else
return daysInMonth[month - 1];
}
public void checknumberofdays两个日期之间(models.Date-date2){
国际日、月、年;
如果(日期2.checkIfLegal()){
如果(日期2.day<天){
date2.day+=date2.numberOfDaysInMonth();
}
date2.month=date2.month-1;
}
如果(日期2.2月<月){
日期2.2月+=12日;
日期2.1年-=1;
}
day_diff=date2.day-天;
mon_diff=date2.month-month;
year_diff=date2.year—year;
系统输出打印项次(“日:+日差+”月:+月差+”年:+年差);
}
私有布尔值isLeapYear(){
返回年份%4==0&&
(年份%100!=0 | |年份%400==0);
}
公共布尔checkIfLegal(){
布尔验证=假;
如果(月<1 | |月>12 | | |日<1 | |日>numberOfDaysInMonth()){
验证=假;
}否则{
验证=真;
}
退货确认;
}
private int numberOfDaysInMonth(){
如果(月==2&&isLeapYear())
返回29;
其他的
返回日期每月[第1个月];
}
如果第二个日期的天数小于第一个日期的天数,则添加一个月的天数:
date2.day += date2.numberOfDaysInMonth();
添加
date2
月份的天数(此处为31,3月份的天数)。但是您必须添加上个月的天数(这里是29,2月份的天数)
另一件需要考虑的事情:方法checkIfLegal
可以简化为
public boolean checkIfLegal() {
return month >= 1 && month <= 12 && day >= 1 && day <= numberOfDaysInMonth();
}
public boolean checkIfLegal(){
return month>=1&&month=1&&day您检查了吗?@ArvindKumarAvinash这些解决方案包括不同的java方法,如getTime(),日历和其他东西。我想要两个日期之间计算的数学过程。@TiKi,首先,更改输入参数是不对的。你不应该在计算中更改date2
对象。至于有什么问题,请调试它:当date2.day
时,你添加到date2.day
三月份的天数,而h是31,它比今年2月的天数正好多2天,并且与您的错误率有很好的相关性。使用java.time API是最舒服的,它在类中提供了现成的实现,如ZonedDateTime
@pxcv7r,在这种特殊情况下,它是LocalDate
和Period
,bu这不是问题的重点:OP想编写自己的实现。