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

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章