![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }