java

今天有时间写一个计算两个日期之间有多少个日期,在这儿献丑了。呵呵,不说废话了,请看源码:

//获取某段日期之间的日期集合
    public static List<String> getDateStringListByBetweenTwoDates(String beginDate,String endDate){
        List<String> dateList = new ArrayList<String>();
        int maxRound = 366;//hardcode
        int round = 0;
        String nextDate = beginDate;
        dateList.add(nextDate);
        while ((nextDate != null && !nextDate.equals(endDate)) && round++ < maxRound){
            nextDate = DateStringAdd(nextDate, 1);
            dateList.add(nextDate);
        }
        return dateList;
    }

public static String DateStringAdd(String dateString, int add){
        String sret = "";
        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
        if (dateString == null)
            return null;
        if (add == 0)
            return dateString;
        if (!dateString.startsWith("1") && !dateString.startsWith("2"))
            return null;
        if(add <0)
            return null;
        try {
            Date date = sf.parse(dateString);
            int year = date.getYear()+1900;
            int month = date.getMonth()+1;
            int day = date.getDate();
            switch(month){
                case 1:
                case 3:
                case 5:
                case 7:
                case 8:
                case 10:
                    if(day+add>31){
                        month++;
                        day=1;
                    }else{
                        day=day+add;
                    }
                    break;
                case 12:
                    if(month==12 && day+add>31){
                        year++;
                        month=1;
                        day=1;
                    }else{
                        day=day+add;
                    }
                    break;
                case 4:
                case 6:
                case 9:
                case 11:
                    if(day+add>30){
                        month++;
                        day=1;
                    }else{
                        day=day+add;
                    }
                    break;
                case 2:
                    if(year%400==0||(year%4==0 && year%100!=0)){
                        if(day+add>29){
                            month++;
                            day=1;
                        }else{
                            day=day+add;
                        }
                    }else{
                        if(day+add>28){
                            month++;
                            day=1;
                        }else{
                            day=day+add;
                        }
                    }
                    break;
            }
            if(month<10){
                sret = year+"-0"+month;
            }else{
                sret = year+"-"+month;
            }
            if(day<10){
                sret = sret+"-0"+day;
            }else{
                sret = sret+"-"+day;
            }
        } catch (ParseException e) {
            e.printStackTrace();
        }
       
        return sret;
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值