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

//获取哪一天
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);
}

java计算两个日期之间相隔的天数

import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; impor ...

java计算两个日期之间的相隔天数

[原创] 之前在很多竞赛的题目中有这样饿一类题,计算给定两个日期之间的相隔天数,或者很多类似的题目,都是需要转化到这个问题上时,之前用c++写的时候思想是这样的,一个结构体,包括年月日,还有一个计算下 ...

java计算两个日期之间的天数,排除节假日和周末

如题所说,计算两个日期之前的天数,排除节假日和周末.这里天数的类型为double,因为该功能实现的是请假天数的计算,有请一上午假的为0.5天. 不够很坑的是每个日期都要查询数据库,感觉很浪费时间. 原 ...

java获得两个日期之间的所有月份

private static List getMonthBetween(String minDate, String maxDate) throws ParseExcept ...

java中计算两个日期之间天数的程序设计。

//用java编写出一个以下方法计算两个日期之间天数的程序设计. import java.util.regex.Matcher; import java.util.regex.Pattern; pub ...

Java 计算两个日期相差的天数

import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; impor ...

Java计算两个日期相差的天数

import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; impor ...

java计算两个日期相差多少天

java计算两个日期相差多少天 public class DateUtil{ public static int betweenDays(Date startDate, Date endDate ) ...

java 获取两个日期之间的所有日期(年月日)

前言:直接上代码 java 获取两个日期之间的所有日期(年月日) /** * 获取两个日期之间的日期,包括开始结束日期 * @param start 开始日期 * @param end 结束日期 * ...

随机推荐

Windows下Nginx配置SSL实现Https访问(包含证书生成)

Vincent.李   Windows下Nginx配置SSL实现Https访问(包含证书生成) Windows下Nginx配置SSL实现Https访问(包含证书生成) 首先要说明为什么要实现https ...

Linux之sed命令详解

简介 sed 是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的 ...

HDOJ 3516 Tree Construction

四边形优化DP Tree Construction Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Jav ...

ActiveMQ + NodeJS + Stomp 极简入门

前提 安装ActiveMQ和Nodejs 测试步骤 1.执行bin\win32\activemq.bat启动MQ服务 2. 打开http://localhost:8161/admin/topics.j ...

MongoDB之DBref(关联插入,查询,删除) 实例深入

suppose I have the following datastructure ...

pynlpir 报错 Cannot Save user dictionary 原因与解决方法

在使用pynlpir和用户自定义词典进行分词时,如果报出如下错误: [2017-12-09 18:05:51] Cannot Save user dictionary Cannot write log ...

【剑指offer】单链表尾部插入一个节点

#include using namespace std; //链表结构体 struct ListNode { int m_Value; ListNode *next ...

CentOS下安装Filezilla软件

说到Centos大家都是非常熟悉了,当然Filezilla也是日常中应用的软件,但是在linux下安装怎么操作呢.安装Filezilla有多个方式,但用户应该最喜欢用的就是下载安装包,然后执行安装.安 ...

json的例子

{  "Code": 200,  "Msg": "",  "Result": "{\"Platfor ...