View Code
  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         }
posted on 2012-05-11 14:14  捣乃忒  阅读(198)  评论(0编辑  收藏  举报