java 计算相差几个月_两个时间点计算相隔几年,几个月,几天-java

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.Calendar;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

public class DateDaySub {

private static Calendar calS = Calendar.getInstance();

private static Pattern p = Pattern.compile("\\d{4}-\\d{2}-\\d{2}");//定义整则表达式

/**

* 计算剩余时间

*

* @param startDateStr yyyy-MM-dd

* @param endDateStr yyyy-MM-dd

* @return ?年?个月?天

*/

public static String remainDateToString(String startDateStr, String endDateStr) {

java.util.Date startDate = null;

java.util.Date endDate = null;

try {

startDate = new SimpleDateFormat("yyyy-MM-dd").parse(startDateStr);

} catch (ParseException e) {

e.printStackTrace();

return "";

}

try {

endDate = new SimpleDateFormat("yyyy-MM-dd").parse(endDateStr);

} catch (ParseException e) {

e.printStackTrace();

return "";

}

calS.setTime(startDate);

int startY = calS.get(Calendar.YEAR);

int startM = calS.get(Calendar.MONTH);

int startD = calS.get(Calendar.DATE);

int startDayOfMonth = calS.getActualMaximum(Calendar.DAY_OF_MONTH);

calS.setTime(endDate);

int endY = calS.get(Calendar.YEAR);

int endM = calS.get(Calendar.MONTH);

//处理2011-01-10到2011-01-10,认为服务为一天

int endD = calS.get(Calendar.DATE) + 1;

int endDayOfMonth = calS.getActualMaximum(Calendar.DAY_OF_MONTH);

StringBuilder sBuilder = new StringBuilder();

if (endDate.compareTo(startDate) < 0) {

return sBuilder.append("过期").toString();

}

int lday = endD - startD;

if (lday < 0) {

endM = endM - 1;

lday = startDayOfMonth + lday;

}

//处理天数问题,如:2011-01-01 到2013-12-31 2年11个月31天 实际上就是3年

if (lday == endDayOfMonth) {

endM = endM + 1;

lday = 0;

}

int mos = (endY - startY) * 12 + (endM - startM);

int lyear = mos / 12;

int lmonth = mos % 12;

if (lyear > 0) {

sBuilder.append(lyear + "年");

}

if (lmonth > 0) {

sBuilder.append(lmonth + "个月");

}

// if(lyear==0)//满足项目需求 满一年不显示天数

if (lday > 0) {

sBuilder.append(lday + "天");

}

return sBuilder.toString();

}

/*

* 转换 dataAndTime 2013-12-31 23:59:59 到

* date 2013-12-31

*/

public static String getDate(String dateAndTime) {

if (dateAndTime != null && !"".equals(dateAndTime.trim())) {

Matcher m = p.matcher(dateAndTime);

if (m.find()) {

return dateAndTime.subSequence(m.start(), m.end()).toString();

}

}

return "data error";

}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值