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

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

2011-08-31 10:33 429 查看
在项目中有这样的需求: 需要显示剩余的年月日。如下表:

起始时间 截至期 有效期

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