求两个日期之间相差几个月零几天
来源:互联网 发布:淘宝贝亲奶瓶是真的吗 编辑:程序博客网 时间:2024/05/05 15:40
//将字符串转为date
public static Date getTimeForString(String datestr) {
if (null == datestr || "" == datestr) {
return null;
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
return sdf.parse(datestr);
} catch (Exception e) {
return null;
}
}
/**
* 根据年月获得当前月天数
* @param dyear 年
* @param dmouth 月
* @return
*/
public static int calDayByYearAndMonth(String dyear,String dmouth){
SimpleDateFormat simpleDate = new SimpleDateFormat("yyyy/MM");
Calendar rightNow = Calendar.getInstance();
try{
rightNow.setTime(simpleDate.parse(dyear+"/"+dmouth));
}catch(ParseException e){
e.printStackTrace();
}
return rightNow.getActualMaximum(Calendar.DAY_OF_MONTH);//根据年月 获取月份天数
}
/**
* 得到两日期相差几个月零几天
* @param startDate 开始日期 0000-00-00
* @param endDate 结束日期 0000-00-00
* @return 月份,零几天 1,2 (一个月零两天) 返回0则结束日期小于开始日期
* @throws ParseException
*/
public static String getMonthDiff(String startDate, String endDate) throws ParseException {
Date Date1 = getTimeForString(startDate);
Date Date2 = getTimeForString(endDate);
String str="0";
if(Date2.getTime()>=Date1.getTime()){
String[] split1 = startDate.split("-");
int year1 = Integer.parseInt(split1[0]);
int month1 = Integer.parseInt(split1[1]);
int day1 = Integer.parseInt(split1[2]);
String[] split2 = endDate.split("-");
int year2 = Integer.parseInt(split2[0]);
int month2 = Integer.parseInt(split2[1]);
int day2 = Integer.parseInt(split2[2]);
int year = year2-year1;
int month =month2-month1;
int day = day2-day1;
if(day<=0){ //结束日期天 - 开始日期天为负数,则向月借位 , 借位月 -1 ,天计算为 借位月天数+ 原结束日期天 - 开始日期天
month--;
if(month<0){//借位月减后小于等于0则向年借位
year--;//年--
if(year>=0){//如果年大于等于开始日期年,则借位月值为12,否则结束日期小于开始日期,异常
month=year*12+11;
int monthday = calDayByYearAndMonth(String.valueOf(year), String.valueOf(month));
day =monthday+day2-day1;
if(monthday==day){
month++;
day=0;
}
}else{
month=0;
day=0;
}
}else{
month=year*12+month;
int monthday = calDayByYearAndMonth(String.valueOf(year), String.valueOf(month));
day =monthday+day2-day1;
if(monthday==day){
month++;
day=0;
}
}
}else{
month = month +year*12;
int monthday = calDayByYearAndMonth(String.valueOf(year2), String.valueOf(month2));
if(monthday==day){
month++;
day=0;
}
}
str=month+","+day;
}
return str;
}
public static Date getTimeForString(String datestr) {
if (null == datestr || "" == datestr) {
return null;
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
return sdf.parse(datestr);
} catch (Exception e) {
return null;
}
}
/**
* 根据年月获得当前月天数
* @param dyear 年
* @param dmouth 月
* @return
*/
public static int calDayByYearAndMonth(String dyear,String dmouth){
SimpleDateFormat simpleDate = new SimpleDateFormat("yyyy/MM");
Calendar rightNow = Calendar.getInstance();
try{
rightNow.setTime(simpleDate.parse(dyear+"/"+dmouth));
}catch(ParseException e){
e.printStackTrace();
}
return rightNow.getActualMaximum(Calendar.DAY_OF_MONTH);//根据年月 获取月份天数
}
/**
* 得到两日期相差几个月零几天
* @param startDate 开始日期 0000-00-00
* @param endDate 结束日期 0000-00-00
* @return 月份,零几天 1,2 (一个月零两天) 返回0则结束日期小于开始日期
* @throws ParseException
*/
public static String getMonthDiff(String startDate, String endDate) throws ParseException {
Date Date1 = getTimeForString(startDate);
Date Date2 = getTimeForString(endDate);
String str="0";
if(Date2.getTime()>=Date1.getTime()){
String[] split1 = startDate.split("-");
int year1 = Integer.parseInt(split1[0]);
int month1 = Integer.parseInt(split1[1]);
int day1 = Integer.parseInt(split1[2]);
String[] split2 = endDate.split("-");
int year2 = Integer.parseInt(split2[0]);
int month2 = Integer.parseInt(split2[1]);
int day2 = Integer.parseInt(split2[2]);
int year = year2-year1;
int month =month2-month1;
int day = day2-day1;
if(day<=0){ //结束日期天 - 开始日期天为负数,则向月借位 , 借位月 -1 ,天计算为 借位月天数+ 原结束日期天 - 开始日期天
month--;
if(month<0){//借位月减后小于等于0则向年借位
year--;//年--
if(year>=0){//如果年大于等于开始日期年,则借位月值为12,否则结束日期小于开始日期,异常
month=year*12+11;
int monthday = calDayByYearAndMonth(String.valueOf(year), String.valueOf(month));
day =monthday+day2-day1;
if(monthday==day){
month++;
day=0;
}
}else{
month=0;
day=0;
}
}else{
month=year*12+month;
int monthday = calDayByYearAndMonth(String.valueOf(year), String.valueOf(month));
day =monthday+day2-day1;
if(monthday==day){
month++;
day=0;
}
}
}else{
month = month +year*12;
int monthday = calDayByYearAndMonth(String.valueOf(year2), String.valueOf(month2));
if(monthday==day){
month++;
day=0;
}
}
str=month+","+day;
}
return str;
}
0 0
- 求两个日期之间相差几个月零几天
- 计算两个日期之间相差几月几天
- 两个日期之间的相差几个月,精确到天。
- 计算两个日期之间相差几天
- oracle求两个日期之间相差天数
- 怎么计算两个日期之间相差几天及时几分
- 计算两个日期之间相差几天几小时几分钟
- 比较两个日期相差几天
- java 计算两个日期相差了几个月
- java 计算两个日期相差了几个月
- javascript计算两个日期之间相差几个月份
- 时间日期:获取两个日期相差几天
- 计算两个日期之间相差的月数
- 计算两个日期之间相差的月数 (网络摘取)
- 计算两个日期之间相差的月数
- Java 计算两个日期之间相差的月数
- /* 求任意两个日期之间相差的天数 */
- C++求两个日期之间的相差天数
- 数据库性能优化:数据库表优化之SQL索引
- Shell脚本学习指南笔记
- Memcache技术分享:介绍、使用、存储、算法、优化、命中率
- BASLER ac640-12-gc工业相机简介与配置
- linux 命令之ifstat
- 求两个日期之间相差几个月零几天
- leetcode_Remove Linked List Elements
- 1023. 组个最小数 (20)
- ubuntu 使用composer 安装 laravel
- iOS隐藏导航条1px的底部横线
- JavaScript and CSS 定位与浮动对的实现
- PHP开发框架--CodeIgniter(CI)使用总结
- jsp语法学习 - page
- MAC删除目录的“.svn”文件