关于日期的常用算法
2013-10-24 15:49
295 查看
关于日期的常用算法有很多,但如果掌握了基本的算法,难一点的可以分解为简单的,各个击破。
1)判断一年是否为闰年:
[java]
view plaincopyprint?
//判断一年是否为闰年
static boolean IsLeapYear(int year){
return (year %
400 == 0 || year %
4 == 0 && year %
100 != 0);
}
2)获得某一年的总天数:(闰年366天,非闰年355)
[java]
view plaincopyprint?
//获得某一年的总天数
static int GetAllDays(int year){
return (IsLeapYear(year)?
366: 365);
}
3)获得某年、某月的最大天数
[java]
view plaincopyprint?
//获得某年、某月的最大天数
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)获得某年、某月、某日是这一年的第几天
[java]
view plaincopyprint?
//获得某年、某月、某日是这一年的第几天
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)获得某年某月的下一天
[java]
view plaincopyprint?
//获得某年某月某日的下一天
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)获得某年某日的前一天
[java]
view plaincopyprint?
//获得某年某月某日的前一天
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天后的日期
[java]
view plaincopyprint?
//获得某年某月某日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;
}
1)判断一年是否为闰年:
[java]
view plaincopyprint?
//判断一年是否为闰年
static boolean IsLeapYear(int year){
return (year %
400 == 0 || year %
4 == 0 && year %
100 != 0);
}
//判断一年是否为闰年 static boolean IsLeapYear(int year){ return (year % 400 == 0 || year % 4 == 0 && year % 100 != 0); }
2)获得某一年的总天数:(闰年366天,非闰年355)
[java]
view plaincopyprint?
//获得某一年的总天数
static int GetAllDays(int year){
return (IsLeapYear(year)?
366: 365);
}
//获得某一年的总天数 static int GetAllDays(int year){ return (IsLeapYear(year)? 366: 365); }
3)获得某年、某月的最大天数
[java]
view plaincopyprint?
//获得某年、某月的最大天数
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;
}
}
//获得某年、某月的最大天数 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)获得某年、某月、某日是这一年的第几天
[java]
view plaincopyprint?
//获得某年、某月、某日是这一年的第几天
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;
}
//获得某年、某月、某日是这一年的第几天 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)获得某年某月的下一天
[java]
view plaincopyprint?
//获得某年某月某日的下一天
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;}
}
}
//获得某年某月某日的下一天 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)获得某年某日的前一天
[java]
view plaincopyprint?
//获得某年某月某日的前一天
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;
}
}
}
//获得某年某月某日的前一天 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天后的日期
[java]
view plaincopyprint?
//获得某年某月某日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);
}
//获得某年某月某日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);
}
//比较日期大小 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;
}
相关文章推荐
- 关于日期的常用算法
- 关于日期的常用算法
- Java编程中关于日期的常用算法
- 关于日期的常用算法
- 关于日期的常用算法
- 收藏:java中关于时间日期操作的常用函数
- java中关于时间日期操作的常用函数
- java中关于时间日期操作的常用函数
- 近期准备写一系列关于使用python实现常用算法的文章
- java中关于时间日期操作的常用函数
- Bash中关于日期时间操作的常用自定义函数
- 关于SQL Server2008中提供的9种常用的数据挖掘算法
- java中关于时间日期操作的常用函数
- 关于时间,日期,星期,月份的算法(Java中Calendar的使用方法)
- java中关于时间日期操作地常用函数
- Android关于时间日期相关常用方法
- 日期常用算法
- 关于时间,日期,星期,月份的算法(Java中Calendar的使用方法)
- 日期的常用算法
- java中关于时间日期操作的常用函数