1 /// <summary>
2 /// 计算相差天数
3 /// </summary>
4 /// <param name="date1"></param>
5 /// <param name="date2"></param>
6 /// <returns></returns>
7 private static int DaysBetweenTwoDate(string date1, string date2)
8 {
9 //分别取出两个日期的年月日
10 int year1 = int.Parse(date1.Substring(0, 4));
11 int month1 = int.Parse(date1.Substring(4, 2));
12 int day1 = int.Parse(date1.Substring(6, 2));
13 int year2 = int.Parse(date2.Substring(0, 4));
14 int month2 = int.Parse(date2.Substring(4, 2));
15 int day2 = int.Parse(date2.Substring(6, 2));
16
17 //如果年和月份都相同
18 if (year1 == year2 && month1 == month2)
19 {
20 if (day1 > day2)
21 {
22 return day1 - day2;
23 }
24 else
25 {
26 return day2 - day1;
27 }
28 }
29 else if (year1 == year2)//如果年相同
30 {
31 int d1 = DayInYear(year1, month1, day1);
32 int d2 = DayInYear(year2, month2, day2);
33 return d1 > d2 ? d1 - d2 : d2 - d1;
34 }
35 else//年月都不相同
36 {
37 //假设year1比year2年份早
38 if (year1 > year2)
39 {
40 Swap(year1,year2);
41 Swap(month1,month2);
42 Swap(day1,day2);
43 }
44 //剩余天数
45 int leaveDay = 0;
46 //当前天数
47 int presentDay = DayInYear(year2,month2,day2);
48 int otherDay = 0;
49 //判断是否是闰年
50 if (IsLeapYear(year1))
51 {
52 //计算该日期该年份还剩多少天
53 leaveDay = 366 - DayInYear(year1, month1, day1);
54 }
55 else
56 {
57 leaveDay = 365 - DayInYear(year1,month1,day1);
58 }
59 for (int i = year1 + 1; i < year2; i++)
60 {
61 if (IsLeapYear(i))
62 otherDay += 366;
63 else
64 otherDay+= 365;
65 }
66 return leaveDay + presentDay + otherDay;
67 }
68 }
69
70 /// <summary>
71 /// 交换两个值
72 /// </summary>
73 /// <param name="year1"></param>
74 /// <param name="year2"></param>
75 private static void Swap(int year1, int year2)
76 {
77 int temp = year2;
78 year1 = year2;
79 year2 = temp;
80 }
81
82 /// <summary>
83 /// 根据给定的日期,求出它在该年的第几天
84 /// </summary>
85 /// <param name="year1"></param>
86 /// <param name="month1"></param>
87 /// <param name="day1"></param>
88 /// <returns></returns>
89 private static int DayInYear(int year, int month, int day)
90 {
91 int[] days = new int[] { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
92 if (IsLeapYear(year))
93 {
94 //如果是闰年
95 days[1] = 29;
96 }
97 for (int i = 0; i < month - 1; i++)
98 {
99 day += days[i];
100 }
101 return day;
102 }
103
104 /// <summary>
105 /// 验证日期合法性
106 /// 标准格式YYYYMMDD
107 /// </summary>
108 /// <param name="date1"></param>
109 /// <param name="date2"></param>
110 private static bool CheckDate(string date)
111 {
112 try
113 {
114 //取出年月日
115 int year = int.Parse(date.Substring(0, 4));
116 int month = int.Parse(date.Substring(4, 2));
117 int day = int.Parse(date.Substring(6, 2));
118 int[] days = new int[] { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
119 if (IsLeapYear(year))
120 {
121 //如果是闰年
122 days[1] = 29;
123 }
124 return year > 0 && month <= 12 && month > 0 && day <= days[month-1] && day > 0;
125 }
126 catch
127 {
128 return false;
129 }
130 }
131
132 /// <summary>
133 /// 判断是否是闰年
134 /// </summary>
135 /// <param name="year"></param>
136 /// <returns></returns>
137 private static bool IsLeapYear(int year)
138 {
139 return (year % 4 == 0 || year % 400 == 0) && (year % 100 != 0);
140 }