Java后端获取日期相关

private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 

 1: //获取指定月的第一天或者最后一天
    public static String getFirstOrLastDayOfMonth(String days,int status) {//0获取第一天,1获取最后一天
        String[] dayArry = days.split("-");
        int year = Integer.parseInt(dayArry[0]);
        int month = Integer.parseInt(dayArry[1]);
        Calendar cal = Calendar.getInstance();     
        cal.set(Calendar.YEAR, year);     
        cal.set(Calendar.MONTH, month-1);    
        if (status==0) {//
            cal.set(Calendar.DAY_OF_MONTH,cal.getMinimum(Calendar.DATE));  
        }else {
            cal.set(Calendar.DAY_OF_MONTH,cal.getActualMaximum(Calendar.DATE));  
        }
       return  new   SimpleDateFormat( "yyyy-MM-dd ").format(cal.getTime());  
    }  

 

   2:// 获取当前日期的上*周,或者下*周 
    public static String[] getDate(String status, String gotoDate, String baseday) throws Exception {
        SimpleDateFormat sdff = new SimpleDateFormat("yyyy-MM-dd");
        String[] dateList = new String[7];
        Date sdate = null;
        if (gotoDate == null || gotoDate == "")
            sdate = new Date();
        else
            sdate = sdff.parse(gotoDate);// 设置要跳转的日期
        if (status != null && status != "") {
            Calendar calendar = Calendar.getInstance();
            Date base = null;
            if (baseday != null && baseday != "") {
                sdate = sdff.parse(baseday);
            }
            calendar.setTime(sdate);
            if (status.equals("0")) {
                sdate = new Date();
                if (baseday != null && baseday != "") {
                    sdate = sdff.parse(baseday);
                }
            } else if (status.equals("99")) {
                sdate = new Date();
            } else {
                int state1 = Integer.parseInt(status);
                calendar.add(Calendar.DATE, 7 * state1);// 日期减一
                sdate = calendar.getTime();
            }
        }
        Calendar cal = Calendar.getInstance();
        cal.setTime(sdate);

        // 判断要计算的日期是否是周日,如果是则减一天计算周六的,否则会出问题,计算到下一周去了
        int dayWeek = cal.get(Calendar.DAY_OF_WEEK);// 获得当前日期是一个星期的第几天
        if (1 == dayWeek) {
            cal.add(Calendar.DAY_OF_MONTH, -1);
        }
        cal.setFirstDayOfWeek(Calendar.MONDAY);// 设置一个星期的第一天,按中国的习惯一个星期的第一天是星期一
        int day = cal.get(Calendar.DAY_OF_WEEK);// 获得当前日期是一个星期的第几天
        cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - day);// 根据日历的规则,给当前日期减去星期几与一个星期第一天的差值
        Date mon = cal.getTime();
        dateList[0] = sdff.format(mon);
        for (int i = 1; i < dateList.length; i++) {
            cal.add(Calendar.DATE, 1);
            dateList[i] = sdff.format(cal.getTime());
        }
        return dateList;
    }

 

    3: // 获取某一年某个月的每一天
    public static List getMonthFullDay(String days, int status) throws Exception  {//status -1 0 1(上 本 下)
        String[] dayArry = days.split("-");
        int year = Integer.parseInt(dayArry[0]);
        int month = Integer.parseInt(dayArry[1]) - 1 + status;
        List fullDayList = new ArrayList();
        Calendar cal = Calendar.getInstance();// 获得当前日期对象
        cal.clear();// 清除信息
        cal.set(Calendar.YEAR, year);
        cal.set(Calendar.MONTH, month);// 1月从0开始
        cal.set(Calendar.DAY_OF_MONTH, 1);// 设置为1号,当前日期既为本月第一天
        int count = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
        for (int j = 0; j <= (count - 1);) {
            if (sdf.format(cal.getTime()).equals(getFirstOrLastDayOfMonth(days,1)))
                break;
            cal.add(Calendar.DAY_OF_MONTH, j == 0 ? +0 : +1);
            j++;
            fullDayList.add(sdf.format(cal.getTime()));
        }
        return fullDayList;
    }

    4:日历  // 获取当前月以及附近天数,共42天
    public static List getDays(String days, int status) throws Exception {
        if (days == null || days == "")
            days = sdf.format(new Date());
        List fullDayList = getMonthFullDay(days, status);// 本月的日期
        // 补全第一个星期(有可能含有上一个月的日期)
        String Mfirst = fullDayList.get(0).toString();// 本月的第一天
        String[] firstWeek = getDate(null, Mfirst, null);// 获取本月第一天的周
        List returnList = new ArrayList();
        int week = new CalendarTools().getWeek(sdf.parse(Mfirst));// 获取到是星期几
        for (int i = 0; i < firstWeek.length - (8 - week); i++) {
            returnList.add(firstWeek[i]);
        }
        returnList.addAll(fullDayList);

        // 如果不满足42天,找下一个月的日期补足
        if (returnList.size() < 42) {
            Date date = new CalendarTools().getNexMonthDate(sdf.parse(days));// 获取下一个月的日期
            List nexMonthList = getMonthFullDay(sdf.format(date), status);// 获取下一个月的所有日期
            List otherDays = nexMonthList.subList(0, 42 - returnList.size());
            returnList.addAll(otherDays);
        }
        return returnList;
    }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值