java中计算两个日期之间天数的程序设计。

 1 //用java编写出一个以下方法计算两个日期之间天数的程序设计。
 2 
 3 import java.util.regex.Matcher;
 4 import java.util.regex.Pattern;
 5  
 6 public class Demo4 {
 7     public static void main(String[] args) {
 8         try {
 9             System.out.println(相差天数("2016-11-30", "2016-5-31"));
10         } catch (Exception e) {
11             e.printStackTrace();
12         }
13     }
14      
15     private static Pattern p = Pattern.compile("(\\d{4})-(\\d{1,2})-(\\d{1,2})");
16      
17     public static int 相差天数(String a, String b) throws Exception {
18         Matcher m = p.matcher(a);
19         if (!m.matches())
20             throw new Exception();
21         int y1 = Integer.parseInt(m.group(1));
22         int m1 = Integer.parseInt(m.group(2));
23         int d1 = Integer.parseInt(m.group(3));
24         m = p.matcher(b);
25         if (!m.matches())
26             throw new Exception();
27         int y2 = Integer.parseInt(m.group(1));
28         int m2 = Integer.parseInt(m.group(2));
29         int d2 = Integer.parseInt(m.group(3));
30         return 相差天数(y1, m1, d1, y2, m2, d2);
31     }
32      
33     public static int 相差天数(int y1, int m1, int d1, int y2, int m2, int d2) {
34         return 总第几天(y1, m1, d1) - 总第几天(y2, m2, d2);
35     }
36      
37     public static int 总第几天(int y, int m, int d) {
38         int a = (y - 1) * 365 + (y - 1) / 4 - (y - 1) / 100 + (y - 1) / 400;
39         return a + 年第几天(y, m, d);
40     }
41      
42     public static int 年第几天(int y, int m, int d) {
43         return 闰年(y) ? 润年月前天数[m] + d : 平年月前天数[m] + d;
44     }
45      
46     public static boolean 闰年(int 年) {
47         return 年 % 400 == 0 || (年 % 4 == 0 && 年 % 100 != 0);
48     }
49      
50     private static final int[] 平年月天数 = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
51      
52     private static final int[] 平年月前天数 = new int[14], 润年月前天数 = new int[14];
53     static {
54         int n = 0;
55         for (int i = 1; i <= 12; i++) {
56             平年月前天数[i] = n;
57             润年月前天数[i] = i > 2 ? n + 1 : n;
58             n += 平年月天数[i];
59         }
60         平年月前天数[13] = n;
61         润年月前天数[13] = n + 1;
62     }
63 }

 

posted @ 2016-11-27 12:13  LXQLCCC  Views(1027)  Comments(0Edit  收藏  举报