java實現兩個日期內具有幾個星期幾的計算


      雖然java自帶的Calendar類似乎很好用,但是作為小白的我還不會用。朋友說有時需要計算任意兩個日期內具有幾個星期一或者星期三。問我能不能實現,我想想,能實現,可能代碼不夠優雅。具體代碼放在下面。歡迎朋友與我分享更好的思路或工具吧~

package cn.example.mapper;

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

public class DateUtil {
    public static void main(String[] args) {
        try {
            System.out.println("有" + getMondayNumber("2017-02-03","2017-02-16",5) + "個");
        } 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;
        }else if(startDayOfWeek > dayOfWeek) {
            if(endDayOfWeek < dayOfWeek)
                differenceDay = differenceWeek-1;
        }else {
            differenceDay = differenceWeek;
        }
        return differenceDay;
    }
}

覺得沒啥技術含量,就此記錄下吧,有時間再優化下,比如能夠跨年查詢。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM