黑马程序员技术交流社区

标题: Java编程中关于日期的常用算法 [打印本页]

作者: 李江    时间: 2013-10-11 19:14
标题: Java编程中关于日期的常用算法

转自:http://www.javaweb.cc/language/java/072678.shtml

关于日期的常用算法有很多,但如果掌握了基本的算法,难一点的可以分解为简单的,各个击破。

1)判断一年是否为闰年:

//判断一年是否为闰年
  1. static boolean IsLeapYear(int year){
  2.     return (year % 400 == 0 || year % 4 == 0 && year % 100 != 0);
  3. }
复制代码

2)获得某一年的总天数:(闰年366天,非闰年355)

//获得某一年的总天数
  1. static int GetAllDays(int year){
  2.     return (IsLeapYear(year)? 366: 365);
  3. }
复制代码

3)获得某年、某月的最大天数

  1. //获得某年、某月的最大天数
  2. static int GetMaxDay(int year,int month){
  3.     switch(month)
  4.     {
  5.     case 1:
  6.     case 3:
  7.     case 5:
  8.     case 7:
  9.     case 8:
  10.     case 10:
  11.     case 12:
  12.         return 31;        
  13.     case 4:
  14.     case 6:
  15.     case 9:
  16.     case 11:
  17.         return 30;   
  18.     case 2:
  19.         return (IsLeapYear(year)? 29: 28);   
  20.     default:
  21.         return -1;
  22.     }
  23. }
复制代码

4)获得某年、某月、某日是这一年的第几天

//获得某年、某月、某日是这一年的第几天
  1. static int GetDays(int year,int month,int day){
  2.     int sum = 0;
  3.    
  4.     for(int i = 1; i < month ; i++){
  5.         sum += GetMaxDay(year,i);
  6.     }
  7.    
  8.     return sum+day;
  9. }
复制代码

5)获得某年某月的下一天

//获得某年某月某日的下一天
  1. static void GetNextDay(int year,int month,int day){
  2.     if(day != GetMaxDay(year,month)){
  3.         day++;
  4.     }else
  5.     {
  6.         if(month != 12)
  7.         {month++; day = 1;}
  8.         else
  9.         {year++; month = day =1;}
  10.     }
  11. }
复制代码

6)获得某年某日的前一天

  1. //获得某年某月某日的前一天
  2. static void GetPreDay(int year,int month,int day){
  3.     if(day != 1){
  4.         day--;
  5.     }else{
  6.         if(month != 1){
  7.             month--;
  8.             GetMaxDay(year,month);
  9.         }
  10.         else{
  11.             year--;month = 12;day = 31;
  12.         }
  13.     }
  14. }
  15. 7)获得某年某月某日n天后的日期
  16. //获得某年某月某日n天之后的日期
  17. static void GetXDay(int year,int month,int day,int X){
  18.     for(int i = 1; i<= X; i++){
  19.         if(day != GetMaxDay(year,month)){
  20.             day++;
  21.         }else{
  22.             if(month != 12){
  23.                 month++;day = 1;
  24.             }else{
  25.                 year++;
  26.                 month = day = 1;
  27.             }
  28.         }
  29.     }
  30.     System.out.println(X+" 天后是:"+year+"-"+month+"-"+day);
  31.    
  32.    
  33. }
复制代码

8)比较日期大小

  1. //比较日期大小
  2. static int CompareDay(int year1,int month1,int day1, int year2,int month2,int day2){
  3.     return year1 != year2? (year1-year2):(month1 != month2 ? (month1-month2): day1-day2);
  4. }
复制代码

9)求日期之差

  1. //求日期之差
  2. static int GetDateDiff1(int year1,int month1,int day1,int year2,int month2,int day2){
  3.     int sum = GetAllDays(year1) - GetDays(year1,month1,day1);
  4.     for(int i = year1+1; i < year2; i++ ){
  5.         sum += GetAllDays(i);
  6.     }
  7.     sum += GetDays(year2,month2,day2);
  8.     return sum;
  9. }
  10. static int GetDateDiff(int year1,int month1,int day1,int year2,int month2,int day2){
  11.     if(CompareDay(year1,month1,day1,year2,month2,day2) > 0){
  12.         return -GetDateDiff1(year2,month2,day2,year1,month1,day1);
  13.     }else if(CompareDay(year1,month1,day1,year2,month2,day2) < 0){
  14.         return GetDateDiff1(year1,month1,day1,year2,month2,day2);
  15.     }
  16.     return 0;
  17. }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2