java實現輸入一個時間段,以及相應的星期數,獲得這個時間段中這些星期的日期

來源:互聯網
上載者:User

標籤:

      最近在做畢設,遇到一個問題。對於給定的一個時間段和特定的星期,我需要獲得這個時間段中所有的給定星期的日期。

比如,獲得從2015-01-01到2015-01-21所有的星期一和星期二的日期。 

package com.cc.common;


import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;




public class WeekDayUtil {


    /**
     * 輸入一個日期的時間段,以及相應的星期數,獲得這些星期的日期
     */
    private static Map<Integer, Integer> weekNumberMap = new HashMap<Integer, Integer>();
    static {
        weekNumberMap.put(0,1);
        weekNumberMap.put(1,2);
        weekNumberMap.put(2,3);
        weekNumberMap.put(3,4);
        weekNumberMap.put(4,5);
        weekNumberMap.put(5,6);
        weekNumberMap.put(6,7);


    }


    public static List<String> getDates(String dateFrom, String dateEnd, List<Integer> weekDays) {
        long time;
        long perDayMilSec = 24L * 60 * 60 * 1000;
        List<String> dateList = new ArrayList<String>();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        // 需要查詢的星期係數
        String strWeekNumber = weekForNum(weekDays);
        try {
            dateFrom = sdf.format(sdf.parse(dateFrom).getTime() - perDayMilSec);
            while (true) {
                time = sdf.parse(dateFrom).getTime();
                time = time + perDayMilSec;
                Date date = new Date(time);
                dateFrom = sdf.format(date);
                if (dateFrom.compareTo(dateEnd) <= 0) {
                    // 查詢的某一時間的星期係數
                    Integer weekDay = dayForWeek(date);
                    // 判斷當期日期的星期係數是否是需要查詢的
                    if (strWeekNumber.contains(weekDay.toString())) {
                        dateList.add(dateFrom);
                    }
                } else {
                    break;
                }
            }
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return dateList;
    }


    // 等到當期時間的周係數。星期日:1,星期一:2,星期二:3,星期三:4,星期四:5,星期五:6,星期六:7
    public static Integer dayForWeek(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        return calendar.get(Calendar.DAY_OF_WEEK);
    }


    /**
     * 得到對應星期的係數 0:1,星期
     */
    public static String weekForNum(List<Integer> weekDays) {
        // 返回結果為組合的星期係數
        String weekNumber = "";


        for (Integer weekDay : weekDays) {
            weekNumber = weekNumber + "" + getWeekNum(weekDay).toString();
        }
        return weekNumber;


    }


    // 將星期轉換為對應的係數 0,星期日; 1,星期一; 2....
    public static Integer getWeekNum(int strWeek) {
        return weekNumberMap.get(strWeek);
    }


    public static void main(String[] args) {
        //輸出從2015-01-01到2015-01-21之間的所有星期一和星期二的日期。
        List<Integer> daysOfOneWeek = new ArrayList<Integer>();
        daysOfOneWeek.add(1);
        daysOfOneWeek.add(2);
        List<String> daysNeedBookList = getDates("2015-01-01", "2015-01-21", daysOfOneWeek);
        for (String s : daysNeedBookList) {
            System.out.println(s);
        }
    }
}


main方法測試後,輸出:


2015-01-05
2015-01-06
2015-01-12
2015-01-13
2015-01-19
2015-01-20


java實現輸入一個時間段,以及相應的星期數,獲得這個時間段中這些星期的日期

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.