1. 程式人生 > >java 日曆工具類(計算周的開始日期和結束日期,以及包好的日期)

java 日曆工具類(計算周的開始日期和結束日期,以及包好的日期)

package com.zxy.product.training.web.util;


import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;


public class WeekUtil {
/** 
     * 獲取指定年份日曆
     * @param year 
     * @return 
     */  
    private static Calendar getCalendarFormYear(int year){  
        Calendar cal = Calendar.getInstance();  
        cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);        
        cal.set(Calendar.YEAR, year);  
        return cal;  
    }  
/** 
     * 獲取指定年指定周的開始日期
     * @param year 
     * @param weekNo 
     * @return 
     */  
    public static String getStartDayOfWeekNo(int year,int weekNo){  
        Calendar cal = getCalendarFormYear(year);  
        cal.set(Calendar.WEEK_OF_YEAR, weekNo);
        int month = cal.get(Calendar.MONTH) + 1;
        int day = cal.get(Calendar.DAY_OF_MONTH);
        String monthStr = null;
        String dayStr = null;
        StringBuilder monthBuilder = new StringBuilder();
        StringBuilder dayBuilder = new StringBuilder();
        if(month < 10){
        monthStr = monthBuilder.append("0").append(month).toString();
        } else {
        monthStr = monthBuilder.append(month).toString();
        }
        if(day < 10) {
        dayStr = dayBuilder.append("0").append(day).toString();
        } else {
        dayStr = dayBuilder.append(day).toString();
        }
        return cal.get(Calendar.YEAR) + "-" + monthStr + "-" + dayStr;     
          
    }  
      
    /** 
     * 獲取指定年指定周的結束日期
     * @param year 
     * @param weekNo 
     * @return 
     */  
    public static String getEndDayOfWeekNo(int year,int weekNo){  
        Calendar cal = getCalendarFormYear(year);  
        cal.set(Calendar.WEEK_OF_YEAR, weekNo);  
        cal.add(Calendar.DAY_OF_WEEK, 6); 
        int month = cal.get(Calendar.MONTH) + 1;
        int day = cal.get(Calendar.DAY_OF_MONTH);
        String monthStr = null;
        String dayStr = null;
        StringBuilder monthBuilder = new StringBuilder();
        StringBuilder dayBuilder = new StringBuilder();
        if(month < 10){
        monthStr = monthBuilder.append("0").append(month).toString();
        } else {
        monthStr = monthBuilder.append(month).toString();
        }
        if(day < 10) {
        dayStr = dayBuilder.append("0").append(day).toString();
        } else {
        dayStr = dayBuilder.append(day).toString();
        }
        return cal.get(Calendar.YEAR) + "-" + monthStr + "-" +  dayStr;      
    }  


    //獲取 某日是某年的第幾周
    public static int getWeekByDay(String day) throws ParseException {
         SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
         Calendar calendar = Calendar.getInstance();
         calendar.setFirstDayOfWeek(Calendar.SUNDAY);
         calendar.setTime(format.parse(day));
        return calendar.get(Calendar.WEEK_OF_YEAR);
  }
    
    //獲取 指定開始日期和結束日期,包含日期列表。
   public static List<String> getDays(String beginDate, String endDate) throws ParseException {
  List<String> result = new ArrayList<String>();
  SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");  
       Calendar calendar = Calendar.getInstance();  
       calendar.setTime(format.parse(beginDate));  
 
       for (long  time= calendar.getTimeInMillis(); time <= format.parse(endDate).getTime(); time = getNextDay(calendar)) {  
      result.add(format.format(time));  
       }  
  return result;
   }
   
   public static long getNextDay(Calendar calendar) {  
  calendar.set(Calendar.DAY_OF_MONTH, calendar.get(Calendar.DAY_OF_MONTH) + 1);  
       return calendar.getTimeInMillis();  
   } 
    
  /**
 * @param args
 * @throws ParseException
 */
public static void main(String[] args) throws ParseException{
 String day = "2016-12-31";
int week = WeekUtil.getWeekByDay(day);

System.out.println("第"+week+"周");
System.out.println("第"+week+"周開始日期:"+WeekUtil.getStartDayOfWeekNo(2016, week));
System.out.println("第"+week+"周結束日期:"+WeekUtil.getEndDayOfWeekNo(2016, week));

String beginDate = WeekUtil.getStartDayOfWeekNo(2016, week);
String endDate = WeekUtil.getEndDayOfWeekNo(2016, week);

WeekUtil.getDays(beginDate,endDate).stream().forEach(item -> System.out.println("日期:"+item));


  }


}