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


    在项目中有这样的需求:   需要显示剩余的年月日。如下表:

    起始时间                截至期                     有效期 

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

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

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

     
    1. /** 
    2.  * 处理平台的时间转换 
    3.  * @author alf 
    4.  * 2011-8-31 上午09:21:39 
    5.  */  
    6. public class DateHandler {  
    7.     private static Calendar calS=Calendar.getInstance();  
    8.     private static Pattern   p   =   Pattern.compile("\\d{4}-\\d{2}-\\d{2}");//定义整则表达式  
    9.     private DateHandler(){}  
    10.     /** 
    11.      * 计算剩余时间 
    12.      * @param startDateStr 
    13.      * @param endDateStr 
    14.      * @return 
    15.      */  
    16.     public static String remainDateToString(String startDateStr, String endDateStr){  
    17.         java.util.Date startDate = null;  
    18.         java.util.Date endDate= null;  
    19.         try {  
    20.             startDate = new SimpleDateFormat("yyyy-MM-dd").parse(startDateStr);  
    21.         } catch (ParseException e) {  
    22.             e.printStackTrace();  
    23.             return "";  
    24.         }  
    25.         try {  
    26.             endDate = new SimpleDateFormat("yyyy-MM-dd").parse(endDateStr);  
    27.         } catch (ParseException e) {  
    28.             e.printStackTrace();  
    29.             return "";  
    30.         }  
    31.         calS.setTime(startDate);  
    32.         int startY = calS.get(Calendar.YEAR);  
    33.         int startM = calS.get(Calendar.MONTH);  
    34.         int startD = calS.get(Calendar.DATE);  
    35.         int startDayOfMonth = calS.getActualMaximum(Calendar.DAY_OF_MONTH);  
    36.           
    37.         calS.setTime(endDate);  
    38.         int endY = calS.get(Calendar.YEAR);  
    39.         int endM = calS.get(Calendar.MONTH);  
    40.         //处理2011-01-10到2011-01-10,认为服务为一天  
    41.         int endD = calS.get(Calendar.DATE)+1;  
    42.         int endDayOfMonth = calS.getActualMaximum(Calendar.DAY_OF_MONTH);  
    43.           
    44.         StringBuilder sBuilder = new StringBuilder();  
    45.         if (endDate.compareTo(startDate)<0) {  
    46.             return sBuilder.append("过期").toString();  
    47.         }  
    48.         int lday = endD-startD;  
    49.         if (lday<0) {  
    50.             endM = endM -1;  
    51.             lday = startDayOfMonth+ lday;  
    52.         }  
    53.         //处理天数问题,如:2011-01-01 到 2013-12-31  2年11个月31天     实际上就是3年  
    54.         if (lday == endDayOfMonth) {  
    55.             endM = endM+1;  
    56.             lday =0;  
    57.         }  
    58.         int mos = (endY - startY)*12 + (endM- startM);  
    59.         int lyear = mos/12;  
    60.         int lmonth = mos%12;  
    61.         if (lyear >0) {  
    62.             sBuilder.append(lyear+"年");  
    63.         }  
    64.         if (lmonth > 0) {  
    65.             sBuilder.append(lmonth+"个月");  
    66.         }  
    67.         if (lday >0 ) {  
    68.             sBuilder.append(lday+"天");  
    69.         }  
    70.         return sBuilder.toString();  
    71.     }  
    72.       
    73.     /* 
    74.      * 转换 dataAndTime 2013-12-31 23:59:59 到 
    75.      * date 2013-12-31 
    76.      */  
    77.     public static String getDate(String dateAndTime){  
    78.         if (dateAndTime != null && !"".equals(dateAndTime.trim())) {  
    79.             Matcher   m   =  p.matcher(dateAndTime);   
    80.             if (m.find()) {  
    81.                   return dateAndTime.subSequence(m.start(), m.end()).toString();  
    82.             }  
    83.         }  
    84.         return "data error";  
    85.     }  
    86.       
    87.     public static void main(String[] args) {  
    88.         System.out.println(remainDateToString("2004-02-29""2005-04-01"));  
    89.         System.out.println("A");  
    90.         Date time1=new Date();  
    91.         SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");  
    92.         String tm=sdf.format(time1);//tm就是昨天的日期的字符串表示  
    93.         System.out.println(tm);  
    94.     }  

  • 相关阅读:
    查找大文件 & 索引节点(inode)爆满 解决办法
    技术领导力 —— 左耳听风 专栏读后感
    左耳朵耗子关于技术变现一文读后感
    html--前端jquery初识
    html--JavaScript之DOM (文档对象模型)
    html--前端JavaScript基本内容
    html--前端javascript初识
    html--前端css常用属性
    html--前端css样式初识
    html--前端基本标签内容讲解
  • 原文地址:https://www.cnblogs.com/firstdream/p/2360891.html
Copyright © 2020-2023  润新知