關于日期的常用算法(Java)
關于日期的常用算法有很多,但如果掌握了基本的算法,難一點的可以分解為簡單的,各個擊破。
1)判斷一年是否為閏年:
//判斷一年是否為閏年
static boolean IsLeapYear(int year){
return (year % 400 == 0 || year % 4 == 0 && year % 100 != 0);
} 2)獲得某一年的總天數:(閏年366天,非閏年355)
//獲得某一年的總天數
static int GetAllDays(int year){
return (IsLeapYear(year)? 366: 365);
} 3)獲得某年、某月的最大天數
//獲得某年、某月的最大天數
static int GetMaxDay(int year,int month){
switch(month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
return 31;
case 4:
case 6:
case 9:
case 11:
return 30;
case 2:
return (IsLeapYear(year)? 29: 28);
default:
return -1;
}
} 4)獲得某年、某月、某日是這一年的第幾天
//獲得某年、某月、某日是這一年的第幾天
static int GetDays(int year,int month,int day){
int sum = 0;
for(int i = 1; i < month ; i++){
sum += GetMaxDay(year,i);
}
return sum+day;
} 5)獲得某年某月的下一天
//獲得某年某月某日的下一天
static void GetNextDay(int year,int month,int day){
if(day != GetMaxDay(year,month)){
day++;
}else
{
if(month != 12)
{month++; day = 1;}
else
{year++; month = day =1;}
}
} 6)獲得某年某日的前一天
//獲得某年某月某日的前一天
static void GetPreDay(int year,int month,int day){
if(day != 1){
day--;
}else{
if(month != 1){
month--;
GetMaxDay(year,month);
}
else{
year--;month = 12;day = 31;
}
}
} 7)獲得某年某月某日n天后的日期
//獲得某年某月某日n天之后的日期
static void GetXDay(int year,int month,int day,int X){
for(int i = 1; i<= X; i++){
if(day != GetMaxDay(year,month)){
day++;
}else{
if(month != 12){
month++;day = 1;
}else{
year++;
month = day = 1;
}
}
}
System.out.println(X+" 天后是:"+year+"-"+month+"-"+day);
} 8)比較日期大小
//比較日期大小
static int CompareDay(int year1,int month1,int day1, int year2,int month2,int day2){
return year1 != year2? (year1-year2):(month1 != month2 ? (month1-month2): day1-day2);
} 9)求日期之差
//求日期之差
static int GetDateDiff1(int year1,int month1,int day1,int year2,int month2,int day2){
int sum = GetAllDays(year1) - GetDays(year1,month1,day1);
for(int i = year1+1; i < year2; i++ ){
sum += GetAllDays(i);
}
sum += GetDays(year2,month2,day2);
return sum;
}
static int GetDateDiff(int year1,int month1,int day1,int year2,int month2,int day2){
if(CompareDay(year1,month1,day1,year2,month2,day2) > 0){
return -GetDateDiff1(year2,month2,day2,year1,month1,day1);
}else if(CompareDay(year1,month1,day1,year2,month2,day2) < 0){
return GetDateDiff1(year1,month1,day1,year2,month2,day2);
}
return 0;
}
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!