最近需求里面有个需要计算两个日期之间相隔的月份,写起来还挺繁琐,需要将各种情况都要考虑到,写了一个作为以后自己的工具吧。

 //获取哪一天
public static int getDay(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar.get(Calendar.DATE);
} /**
* 返回日期的月份,1-12,即yyyy-MM-dd中的MM
*
* @param date
* @return
*/
public static int getMonth(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar.get(Calendar.MONTH) + 1;
} /**
* 返回日期的年,即yyyy-MM-dd中的yyyy
*
* @param date
* Date
* @return int
*/
public static int getYear(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar.get(Calendar.YEAR);
}
public static int calDiffMonth(String startDate,String endDate) {
int result=0;
try {
SimpleDateFormat sfd=new SimpleDateFormat("yyyyMMdd");
Date start = sfd.parse(startDate);
Date end = sfd.parse(endDate);
int startYear=getYear(start);
int startMonth=getMonth(start);
int startDay=getDay(start);
int endYear=getYear(end);
int endMonth=getMonth(end);
int endDay=getDay(end); Calendar calendar2= Calendar.getInstance();
calendar2.setTime(start);
int maxDay = calendar2.getActualMaximum(Calendar.DAY_OF_MONTH);//获取起始日期所在月的最后一天
Calendar calendar3 = Calendar.getInstance();
calendar3.setTime(end);
int maxEndDay = calendar3.getActualMaximum(Calendar.DAY_OF_MONTH);//获取结束日期所在月的最后一天
if(startDay == maxDay){//起始日期是在月末
if(maxEndDay==endDay){
result=(endYear-startYear)*12+endMonth-startMonth;
}else {
result=(endYear-startYear)*12+endMonth-startMonth-1;
}
}else if(endDay==maxEndDay){//结束日期是在月末
result=(endYear-startYear)*12+endMonth-startMonth;
}else {
if (endDay >= startDay) {
result=(endYear-startYear)*12+endMonth-startMonth;
}else {
result=(endYear-startYear)*12+endMonth-startMonth-1;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
} public static void main(String[] args) {
int i = calDiffMonth("20171030", "20180228");
System.out.println(i);
}

最新文章

  1. (转)javascript 奇淫巧技44招
  2. loop 循环次数
  3. 【转】VC中的字符串处理
  4. [.net 面向对象编程基础] (20) LINQ使用
  5. SM2国密证书合法性验证
  6. diff, cmp, patch
  7. CSS选择器及其优先级
  8. NSNotification系统通知优化
  9. 大话C#之属性
  10. 获取布局 ActionBar
  11. ROW_NUMBER()/RANK()/DENSE_RANK()/ntile() over()
  12. BIZTALK项目中WEB引用WEBSERVICES服务时候报错
  13. 记一次解析XML转对象的笔记
  14. CSS学习笔记day1
  15. org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.coder520.mamabike.user.dao.UserMapper.selectByPrimaryKey
  16. freemarker之list遍历(八)
  17. Windows下Markdown软件的选择
  18. 【原创】大数据基础之Spark(6)Spark Rdd Sort实现原理
  19. 贪吃蛇(简易版)Leslie5205912著
  20. gulp简介

热门文章

  1. 2017 Multi-University Training Contest - Team 5——HDU6095&&HDU6090&&HDU
  2. echarts容器动态设置高度
  3. 前端开发 - jsDom
  4. 剑指Offer——表示数值的字符串
  5. new Option() 创建一个option标签
  6. Python在向CSV文件写中文时乱码的处理办法
  7. mmu介绍
  8. 前端 Dom 直接选择器
  9. Mediakit报告设备商的空间不足以执行此操作的纯MAC解法
  10. mysql数据库从删库到跑路之mysql表操作