[Java] 计算两个日期之间的差(年 月 日)
2011-08-31 10:33
429 查看
在项目中有这样的需求: 需要显示剩余的年月日。如下表:
起始时间 截至期 有效期
2011-01-01 2013-12-31 3年
2011-01-01 2011-01-01 1天
代码如下: 主要是参考 remainDateToString()方法
起始时间 截至期 有效期
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); } }
相关文章推荐
- java计算两个日期之间相差的天数
- java计算两个日期之间相隔的天数
- java计算两个日期之间相差的天数
- java中计算两个日期之间相差多少天
- java计算两个日期之间相差的天数
- Java计算两个字符串日期之间的天数差
- java计算两个日期之间相差的天数
- 【原创工具】JAVA后台计算两个日期之间的工作日时间差
- java计算两个日期之间相差的天数
- [记录]java计算两个日期之间的间隔天數
- 计算两个日期之间的天数差C++/java
- java计算两个日期之间有多少天
- java计算两个日期之间相差的天数
- java计算两个日期之间相差的天数
- JAVA计算两个日期之间相差的天数
- java计算两个日期之间相差的天数
- java计算两个日期之间相差的天数
- JAVA计算两个日期之间的天数
- java计算两个日期之间相差的天数
- Java&nbsp;计算计算两个日期之间的间隔…