以下是我用來計算給定月份的周開始日期和結束日期的代碼。 假設周開始日是星期一,星期結束日是星期日。例如,2013年1月將有5周。 如果一個月週日開始 - 那一天java - 獲取給定月份每週的開始日期和結束日期
2013年1月 第一個星期忽略 - 31日 - 12月2012年06 - 2013 第二週 - 07 - 2013年13月 - 2013 第三週 - 1月14日 - 2013年20月 - 2013 第四周 - 1月21日 - 2013年1月27日 - 2013 第五週 - 1月28日 - 2013年03月 - 2013
public static void main(String[] args) {
List<List<String>> weekdates = getNumberOfWeeks(2013, Calendar.JULY);
for(List<String> weekDatesLoop:weekdates){
System.out.println("Start day: "+weekDatesLoop.get(0).toString());
System.out.println("End day: "+weekDatesLoop.get(1).toString());
}
}
public static List<List<String>> getNumberOfWeeks(int year, int month) {
System.out.println("Month Id: "+month);
month = month-1;
System.out.println("Month Id: " + month);
SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
List<List<String>> weekdates = new ArrayList<List<String>>();
List<String> dates = new ArrayList<String>();
Calendar c = Calendar.getInstance();
c.set(Calendar.YEAR, year);
c.set(Calendar.MONTH, month);
c.set(Calendar.DAY_OF_MONTH, 1);
dates.add(format.format(c.getTime()));
//int numOfWeeksInMonth = 1;
while (c.get(Calendar.MONTH) == month) {
//System.out.println(c.get(Calendar.DAY_OF_WEEK));
if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) {
dates.add(format.format(c.getTime()));
weekdates.add(dates);
}
else if (c.get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY) {
dates = new ArrayList<String>();
dates.add(format.format(c.getTime()));
//numOfWeeksInMonth++;
}
c.add(Calendar.DAY_OF_MONTH, 1);
}
if(dates.size() < 2){
c.add(Calendar.DAY_OF_MONTH, -1);
dates.add(format.format(c.getTime()));
weekdates.add(dates);
}
System.out.println(weekdates);
return weekdates;
}
我我仍在爲此工作。 任何人都可以請幫我解決這個問題嗎?
更好的算法:從本月的第1天開始回去,直到ü找到一個週一,加6天,寫,加有一天,重複直到達到星期天結束後;和一個指針:將你的方法拆分成更小的方法,如果你這樣做的話代碼變得更簡單和更具可讀性 – Dariusz
@DariuszWawer謝謝。我遵循你的算法,它的工作。 – user1514499