雖然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; } }
覺得沒啥技術含量,就此記錄下吧,有時間再優化下,比如能夠跨年查詢。
