用java编写出一个以下方法计算两个日期之间天数的程序设计。

求输入2个年月日,然后算出他们之间相差多少天(有平年和闰年哦),用java编写程序
分享| 2016-07-29 18:14 熊猫TV丶雷帝 | 浏览 25 次 悬赏:90
java编程语言编程 修改标签

问题: 两个日期(如"2010-04-13"和"1988-10-24"),求它们之间相差的天数
分析: 这是一年看似简单,实际上却有点复杂的小问题,首先你要考虑到月大月小的问题,其次你要考虑到闰年的问题
当然,你也要检测一下,给定的日期格式是否合法,对这个问题的解法,写出伪代码如下
定义变量year1, month1, day1, year2, month2, day2
取出2个日期中的 年 月 日
如果年相同,月也相同:
Return | day1 - day2
如果年相同,月不同:
D1 = date1是该年的第几天
D2 = date2是该年的第几天
Return | d1 - d2
如果年份不同:
D1 = 年份小的日期,离年低还有多少天
D2 = 年份大的日期是这年的第几天
D3 = 两个日期之间相差多少个整年,共有多少天
Return D1 + D2 + D3

想写一个代码就把下面标识符改一下就行了

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class 第几天 {
public static void main(String[] args) {
try {
System.out.println(相差天数("2016-7-30", "2015-7-30"));
} catch (Exception e) {
e.printStackTrace();
}
}

private static Pattern p = Pattern.compile("(\\d{4})-(\\d{1,2})-(\\d{1,2})");

public static int 相差天数(String a, String b) throws Exception {
Matcher m = p.matcher(a);
if (!m.matches())
throw new Exception();
int y1 = Integer.parseInt(m.group(1));
int m1 = Integer.parseInt(m.group(2));
int d1 = Integer.parseInt(m.group(3));
m = p.matcher(b);
if (!m.matches())
throw new Exception();
int y2 = Integer.parseInt(m.group(1));
int m2 = Integer.parseInt(m.group(2));
int d2 = Integer.parseInt(m.group(3));
return 相差天数(y1, m1, d1, y2, m2, d2);
}

public static int 相差天数(int y1, int m1, int d1, int y2, int m2, int d2) {
return 总第几天(y1, m1, d1) - 总第几天(y2, m2, d2);
}

public static int 总第几天(int y, int m, int d) {
int a = (y - 1) * 365 + (y - 1) / 4 - (y - 1) / 100 + (y - 1) / 400;
return a + 年第几天(y, m, d);
}

public static int 年第几天(int y, int m, int d) {
return 闰年(y) ? 润年月前天数[m] + d : 平年月前天数[m] + d;
}

public static boolean 闰年(int 年) {
return 年 % 400 == 0 || (年 % 4 == 0 && 年 % 100 != 0);
}

private static final int[] 平年月天数 = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

private static final int[] 平年月前天数 = new int[14], 润年月前天数 = new int[14];
static {
int n = 0;
for (int i = 1; i <= 12; i++) {
平年月前天数[i] = n;
润年月前天数[i] = i > 2 ? n + 1 : n;
n += 平年月天数[i];
}
平年月前天数[13] = n;
润年月前天数[13] = n + 1;
}
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-12-16
try {
String d1="2016-07-30";
String d2="2015-07-30";

SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");

System.out.println((sdf.parse(d1).getTime()-sdf.parse(d2).getTime())/1000/3600/24);
} catch (ParseException e) {
e.printStackTrace();
}本回答被网友采纳
相似回答