用java编程常用的算法_Java编程中关于日期的常用算法

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;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值