Java编程中关于日期的常用算法
1.[文件] DateUtil.java ~ 4KB 下载(23)
package com.litao.util;
/**
* Java编程中关于日期的常用算法
* @author LITAOTAO
* @category dateUtil
*/
public class DateUtil {
/**
* 判断一年是否为闰年
* @param year
* @return
*/
public static boolean IsLeapYear(int year){
//能被400整出,或者能被4整出但不能被100整数的数(年份),才是闰年
return ((year % 400 == 0)||((year % 4 == 0)&&(year % 100 != 0)));
}
/**
* 获得某一年的总天数(闰年是366天,非闰年是365天)
* @param year
* @return
*/
public static int getAllDays(int year){
return (IsLeapYear(year)?366:365);
}
/**
* 获得某年、某月的最大天数
* @param year
* @param month
* @return
*/
public 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;
}
}
/**
* 获得某年、某月、某日是这一年的第几天
* @param year
* @param month
* @param day
* @return
*/
public static int getDays(int year,int month,int day){
int sum = 0;
for (int i = 1; i < month; i++) { //i代表月份,从1月开始
if(getMaxDay(year, i) < day){
return -1;
}else{
sum += getMaxDay(year, i);
}
}
return sum+day;
}
/**
* 获得某年某月某日的后一天
* @param year
* @param month
* @param day
* @return
*/
public static int getNextDay(int year,int month,int day){
if(day != getMaxDay(year, month)){ //判断是否为某月月末
day++;
}else{
if(month != 12){ //如果不是12月的话,那么就是次月月初
month++;
day = 1;
}else{ //如果是12月的话,那么就是次年的1月1日
year++;
month = day = 1;
}
}
return day;
}
/**
* 获得某年某月某日的前一天
* @param year
* @param month
* @return
*/
public static int getPreDay(int year,int month,int day){
if(day != 1){ //判断是否为某月月初
day--;
}else{
if(month != 1){ //如果不是1月的话,那么就是上月月末
month--;
day = getMaxDay(year, month);
}else{ //如果是1月的话,那么就是上年的12月31日
year--;
month = 12;
day = 31;
}
}
return day;
}
/**
* 获得某年某月某日n天之后的日期
* @param year
* @param month
* @param day
* @param x
* @return
*/
public 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);
}
/**
* 比较日期的大小
* @param year1
* @param month1
* @param day1
* @param year2
* @param month2
* @param day2
* @return
*/
public 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)));
}
/**
* 求日期只差
* @param year1
* @param month1
* @param day1
* @param year2
* @param month2
* @param day2
* @return
*/
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;
}
public 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;
}
}