您的位置:首页 > 编程语言 > Java开发

[Java] 计算两个日期之间的差(年 月 日)

2012-02-21 10:17 204 查看
在项目中有这样的需求: 需要显示剩余的年月日。如下表:


起始时间 截至期 有效期


2011-01-01 2013-12-31 3年


2011-01-01 2011-01-01 1天


代码如下: 主要是参考 remainDateToString()方法

/**

* 处理平台的时间转换

* @author alf

* 2011-8-31 上午09:21:39

*/

public class DateHandler {

private static Calendar calS=Calendar.getInstance();

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

private DateHandler(){}

/**

* 计算剩余时间

* @param startDateStr

* @param endDateStr

* @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 (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";

}

public static void main(String[] args) {

System.out.println(remainDateToString("2004-02-29", "2005-04-01"));

System.out.println("A");

Date time1=new Date();

SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");

String tm=sdf.format(time1);//tm就是昨天的日期的字符串表示

System.out.println(tm);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: