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


    本文采用Calendar 实现 ,当然也可以用java8提供的愉快且方便的时间处理- LocalDate

    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";
        }
    }
    

      

    ggband
  • 相关阅读:
    vue比较模板来跟新数据
    iframe自适应高度
    springmvc接口ios网络请求
    spring mvc实现接口参数统一更改
    spring mvc实现自定义注解
    基于redis集群实现的分布式锁,可用于秒杀,定时器。
    java使用javax.mail进行免费的邮件发送
    前端图片压缩上传(纯js的质量压缩,非长宽压缩)
    java项目中的路径获取,request
    阿里云(腾讯云类似)服务器控制台配置开放所有的端口
  • 原文地址:https://www.cnblogs.com/ggband/p/9711905.html
Copyright © 2020-2023  润新知