java 计算日期中周几有几天


import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * @author
 */
public class DateUtil {
    public static void main(String[] args) {
        try {
            //查询从9月1号到9月30号,星期六有几天
            System.out.println("有" + getMondayNumber("2019-09-01","2019-09-30",6) + "个"+getMonthFirstday("2019-09-08"));
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }
    
    /**
     * 查询日期间有几天一周中的某一天
     * 日期格式 yyyy-MM-dd yyyy-MM-dd 1-7(表示周一到周日) 
     * @param startDay 准备查询的起始日期
     * @param endDay 准备查询的结束日期
     * @param dayOfWeek 准备查的一周中的某一天(准备查周几?)
     * @return 包含所查周几的天数
     * @throws ParseException 不支持跨年查询、不支持结束日期早于起始日期、周几输入错误等
     */
    public static int getMondayNumber(String startDay,String endDay,int dayOfWeek) throws ParseException{
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        int differenceDay = 0;
        //转换起始日期
        Date startDate = sdf.parse(startDay);
        //转换结束日期
        Date endDate = sdf.parse(endDay); 
        //实例化起始和结束Calendar对象
        Calendar startCalendar = Calendar.getInstance();
        Calendar endCalendar = Calendar.getInstance();
        //分别设置Calendar对象的时间
        startCalendar.setTime(startDate);
        endCalendar.setTime(endDate);

        //定义起始日期和结束日期分别属于第几周
        int startWeek = startCalendar.get(Calendar.WEEK_OF_YEAR);
        int endWeek = endCalendar.get(Calendar.WEEK_OF_YEAR);
        
        //拿到起始日期是星期几
        int startDayOfWeek = startCalendar.get(Calendar.DAY_OF_WEEK);
        if(startDayOfWeek == 1)    {
            startDayOfWeek = 7;
            startWeek--;
        }else{
            startDayOfWeek--;
        }
        
        //拿到结束日期是星期几
        int endDayOfWeek = endCalendar.get(Calendar.DAY_OF_WEEK);
        if(endDayOfWeek == 1) {
            endDayOfWeek = 7;
            endWeek--;
        }else{
            endDayOfWeek--;
        }
        
        //计算相差的周数
        int differenceWeek = endWeek - startWeek;
        
        //开始计算
        if(startDayOfWeek <= dayOfWeek) {
            if(endDayOfWeek >= dayOfWeek){
                differenceDay = differenceWeek + 1;
            }
        }if(startDayOfWeek > dayOfWeek) {
            if(endDayOfWeek < dayOfWeek){
                differenceDay = differenceWeek-1;
            }
        }else {
            differenceDay = differenceWeek;
        }
        return differenceDay;
    }


    /**
     * 获取指定月份第一天
     * @return
     */
    public static String getMonthFirstday(String time){
        int year=Integer.parseInt(time.substring(0,4));
        int month=Integer.parseInt(time.substring(5,7));
        SimpleDateFormat sm = new SimpleDateFormat("yyyy-MM-dd");
        //获取指定年月第一天?
        Calendar calstar= Calendar.getInstance();
        calstar.set(Calendar.YEAR, year);
        calstar.set(Calendar.MONTH, month-1);
        calstar.set(Calendar.DAY_OF_MONTH, 1);
        String star =sm.format(calstar.getTime());
        return star;
    }

    /**
     * 获取指定月份最后一天
     * @return
     */
    public static String getMonthlastday(String time){
        SimpleDateFormat sm = new SimpleDateFormat("yyyy-MM-dd");
        int year=Integer.parseInt(time.substring(0,4));
        int month=Integer.parseInt(time.substring(5,7));
        //获取指定年月第一天?
        Calendar calstar= Calendar.getInstance();
        calstar.set(Calendar.YEAR, year);
        calstar.set(Calendar.MONTH, month);
        calstar.set(Calendar.DAY_OF_MONTH, 1);
        //最后一天
        calstar.set(Calendar.DAY_OF_MONTH, 0);
        String end =sm.format(calstar.getTime());
        return  end;
    }

}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值