`

计算两个日期之间相差的月数和天数

    博客分类:
  • java
 
阅读更多
public class DateUtils {
public int getMonth(Date s,Date e){
if(s.after(e)){
Date t=s;
s=e;
e=t;
}
Calendar start = Calendar.getInstance();
start.setTime(s);
Calendar end = Calendar.getInstance();
end.setTime(e);
Calendar temp=Calendar.getInstance();
temp.setTime(e);
temp.add(Calendar.DATE,1);

int y=end.get(Calendar.YEAR)-start.get(Calendar.YEAR);
int m=end.get(Calendar.MONTH)-start.get(Calendar.MONTH);

if((start.get(Calendar.DATE)==1) && (temp.get(Calendar.DATE)==1)){//前后都不破月
return y*12+m+1;
}
else if((start.get(Calendar.DATE)!=1) && (temp.get(Calendar.DATE)==1)){//前破月后不破月
return y*12+m;
}
else if((start.get(Calendar.DATE)==1) && (temp.get(Calendar.DATE)!=1)){//前不破月后破月
return y*12+m;
}
else {//前破月后破月
return (y*12+m-1)<0?0:(y*12+m-1);
}
}

public int getDay(Date s,Date e){
if(s.after(e)){
Date t=s;
s=e;
e=t;
}
Calendar start = Calendar.getInstance();
start.setTime(s);
Calendar end = Calendar.getInstance();
end.setTime(e);
Calendar temp=Calendar.getInstance();
temp.setTime(e);
temp.add(Calendar.DATE,1);

if((start.get(Calendar.DATE)==1) && (temp.get(Calendar.DATE)==1)){//前后都不破月
return 0;
}
else if((start.get(Calendar.DATE)!=1) && (temp.get(Calendar.DATE)==1)){//前破月后不破月
return getDayP(start);
}
else if((start.get(Calendar.DATE)==1) && (temp.get(Calendar.DATE)!=1)){//前不破月后破月
return end.get(Calendar.DATE);
}
else {//前破月后破月
if(start.get(Calendar.MONTH)==end.get(Calendar.MONTH) && start.get(Calendar.YEAR)==end.get(Calendar.YEAR)){
return end.get(Calendar.DATE)-start.get(Calendar.DATE)+1;
}
else{
return getDayP(start)+end.get(Calendar.DATE);
}
}
}


public int getDayP(Calendar s){
int d;
if(s.get(Calendar.MONTH)==1 && s.get(Calendar.YEAR)%4==0 && s.get(Calendar.YEAR)%100!= 0){//闰年2月
d=29;
}
else{
Map<Integer,Integer> m = new HashMap<Integer, Integer>();
m.clear();
m.put(1, 31);
m.put(3, 31);
m.put(5, 31);
m.put(7, 31);
m.put(8, 31);
m.put(10, 31);
m.put(12, 31);
m.put(4, 30);
m.put(6, 30);
m.put(9, 30);
m.put(11, 30);
m.put(2, 28);
d=m.get(s.get(Calendar.MONTH)+1);
}
return d-s.get(Calendar.DATE)+1;
}
}
分享到:
评论

相关推荐

    Java 计算两个日期之间相差的月数

    Java 计算两个日期之间相差的月数 Java 计算两个日期之间相差的月数

    计算两个时间之间的年数、月数、天数等

    计算两个时间之间的年数、月数、天数、时、分、秒,计算两个时间之间的年数、月数、天数、时、分、秒

    DB2 计算相差天数(时间)

    DB2 计算相差天数(时间),打个比方你要计算2013-10-20到2014-03-01的天数

    两个时间间隔的天数

    获取程序中开始时间和结束时间他们相隔多少天

    MySQL计算两个日期相差的天数、月数、年数

    主要介绍了MySQL计算两个日期相差的天数、月数、年数,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

    Java日期工具类

    16、计算传入的两个日期之间相差的天数 17、根据传入的年月返回该月的第一天 18、根据传入的年月返回该月最后的一天 19、获得当前月份的第一天 20、获得当前月份的最后一天 21、获取上月的第一天 22、获取上月的最后...

    PL/SQL 日期时间类型函数及运算

    * MONTHS_BETWEEN:返回两个日期之间相差的月数。 * NEW_TIME:将日期和时间从一个时区转换到另一个时区。 * NEXT_DAY:返回指定日期后将要遇到的后七天的某一天的日期。 * ROUND:四舍五入得到新的日期。 * ...

    隐秘Excel函数DATEDIF.rar

    隐秘Excel函数DATEDIF.rar,DATEDIF函数用于计算两个日期之间的天数、月数或年数。本例内容包括:1、计算日期间隔特殊应用;2、计算日期间相差的年月日。

    桌面数据库-v2016.05.001

    《桌面数据库》,高效的“数据管理、表格制作、富文本编辑”操作平台,功能...4、新增查询“日期时间差”,可方便地查询两日期间相差年数、月数、天数以及时、分。 5、一些疏漏弥补。 注意:以管理员身份安装、运行。

Global site tag (gtag.js) - Google Analytics