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));


  }


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值