计算两个日期之间的天数
比如2016年4月10日到1991年2月2日是正确的,2016年4月10日到2134年5月15日
就差了两天
public class Test03 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入两个日期");
int year1 = scanner.nextInt();
int month1 = scanner.nextInt();
int day1 = scanner.nextInt();
int year2 = scanner.nextInt();
int month2 = scanner.nextInt();
int day2 = scanner.nextInt();
System.out.println("两个日期相差"+ Math.abs(switch1(year1, month1, day1)
- switch1(year2, month2, day2)) + "天");
}
/**
* 该方法用于做闰年判断
* 是闰年返回true,不是闰年则返回false
* return boolean;
* @param year
* @return
/
public static boolean isLeapYear(int year) {
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
return true;
}
return false;
}
/*
* 该方法用于获取某年在某个月的天数
* @param year
* @param month
* @return
*/
public static int daysOfMonth(int year, int month) {
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
return 31;
case 2:
if (isLeapYear(year)) {
return 29;
} else {
return 28;
}
case 4:
case 6:
case 9:
case 11:
return 30;
default:
throw new RuntimeException("月份输入有误");
}
}
/**
* 该方法用来将一个日期转化为距公元0年的天数;
* 负数为公元前的,正数为公元后;
* @param year
* @param month
* @param day
* @return
*/
public static int switch1(int year, int month, int day) {
int y = 0;//给定年份到公元0年的天数
int temp = 0;//中间变量,用来获取当前年份的天数的;
/*
*
* 1.如果year=0,只需计算当前月到元月的天数(不含本月)m+day
* 2.若year>0,计算当前年份到公元0年的天数(不含本年)y+m+day
* 3.若year<0;此时y我负值y+m+day;
*/
while(!(year==0)){
if(year>0){
temp=isLeapYear(year-1)?366:365;
year--;
}else{
temp=-(isLeapYear(year)?366:365);
year++;
}
y+=temp;
}
int m = 0;//当前月在这一年中的已过的天数,不包含本月
for (; month > 1; month--) {
m += daysOfMonth(year, month - 1);
}
return (y + m + day);//年月日相加获得天数
}
}
首先,看了下代码逻辑没有问题啊,我测试了计算结果是正确的。不知道你用的是什么测试数据呢?
其次,求日期间隔的天数的话,可以直接用两个日期的毫秒数相减后除以每天的毫秒数来计算的。
更简单的实现方法如下:
public class DaySpan {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入开始日期(例如20140101):");
String start = scanner.next();
System.out.println("请输入结束日期(例如20150101):");
String end = scanner.next();
Date startDate = formatDate(start);
Date endDate = formatDate(end);
scanner.close();
if(startDate==null){
System.out.println("开始日期格式不正确。");
return;
}
if(endDate==null){
System.out.println("结束日期格式不正确。");
return;
}
int daySpan = daySpan(startDate,endDate);
System.out.println(start+"与"+end+"之间相差"+daySpan+"天。");
scanner.close();
}
public static int daySpan(Date from,Date to){
int daySpan = 0;
long start = from.getTime();
long end = to.getTime();
long dayUnit = (long)24*60*60*1000;
long abs = Math.abs(start-end);
daySpan = (int)(abs/dayUnit);
return daySpan;
}
public static Date formatDate(String str){
Date t = null;
DateFormat format = new SimpleDateFormat("yyyyMMdd");
try {
t = format.parse(str);
} catch (ParseException e) {
e.printStackTrace();
}
return t;
}
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。