java 获取周,年

package com.sszt.zwfw.statisticalanalysis.controller;

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

import com.itextpdf.text.pdf.PdfStructTreeController.returnType;

public class test {
   //获取当前年
	public static  String getCurrentYear(){
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy");
        Date date = new Date();
        return sdf.format(date);
     }
    public static void main(String[] args) throws ParseException {
    	SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    	String  ssd = "2018-12-03 00:00:00";
    	int year = 2018;
		Date today = new Date();
		/*Calendar c = new GregorianCalendar();
		c.setTime(today);*/
        //当前时间
		System.out.println("current date = " + sdf.format(today));
		 //获取当前时间所在年的周数
		System.out.println("getWeekOfYear = " + getWeekOfYear(today));
		try {
			System.out.println("获取当前时间所在年的周数 = " + getWeekOfYear(sdf.parse(ssd)));
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		// 获取当前时间所在年的最大周数
		System.out.println("getMaxWeekNumOfYear = " + getMaxWeekNumOfYear(year));
		//计算某年某周的开始日期
		System.out.println("某年某周的开始日期 = " + getYearWeekFirstDay(year,getWeekOfYear(sdf.parse(ssd))));
		//计算某年某周的开始日期
		System.out.println("某年某周的开始日期 = " + getYearWeekEndDay(year,getWeekOfYear(sdf.parse(ssd))));
		//计算指定年度共有多少个周。
		System.out.println("指定年度共有多少个周 = " + getWeekNumByYear(year));
		List<String[]> list = getWeeksByYear(year);
		/*for (String[] strings : list) {
			for (String string : strings) {
				System.out.println("返回指定年度的所有周:"+string);
			}
		}*/
		for (int i=0;i<list.size();i++) {
			if(getWeekOfYear(sdf.parse(ssd)) == i){
				System.out.println("某年某周的开始日期 = " + getYearWeekFirstDay(year,i));
				//计算某年某周的开始日期
				System.out.println("某年某周的结束日期 = " + getYearWeekEndDay(year,i));
				System.out.println("某周 = " + i);
				for (int j=0;j<list.get(i-1).length;j++) {
					System.out.println("返回指定年度的所有周:"+list.get(i-1)[j]);
				}
			}
			
		}
		List<String> list2 = getWeeksByYear2(year);
		for (String string : list2) {
			//System.out.println("返回指定年度的所有周:"+string);
		}
	}
    //获取当前时间所在年的周数
  	public static int getWeekOfYear(Date date) {
  		//日历
  		Calendar c =  new GregorianCalendar();
  		c.setFirstDayOfWeek(Calendar.MONDAY);
  		c.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);//每周从周一开始
  		c.setMinimalDaysInFirstWeek(7);
  		c.setTime(date);
        return c.get(Calendar.WEEK_OF_YEAR);
  	}
	// 获取当前时间所在年的最大周数
	public static int getMaxWeekNumOfYear(int year) {
		Calendar c = new GregorianCalendar();
		c.set(year, Calendar.DECEMBER, 31, 23, 59, 59);
		return getWeekOfYear(c.getTime());
    }
    
	
	/**
	* 返回指定年度的所有周。List中包含的是String[2]对象<br>
	* string[0]本周的开始日期,string[1]是本周的结束日期。<br>
	* 日期的格式为yyyy-MM-dd。<br>
	* 每年的第一个周,必须包含星期一且是完整的七天。<br>
	* 例如:2009年的第一个周开始日期为2009-01-05,结束日期为2009-01-11。 <br>
	* 星期一在哪一年,那么包含这个星期的周就是哪一年的周。<br>
	* 例如:2008-12-29是星期一,2009-01-04是星期日,哪么这个周就是2008年度的最后一个周。<br>
	*
	* @param year 格式 yyyy ,必须大于1900年度 小于9999年
	* @return
	*/
	public static List<String[]> getWeeksByYear(final int year){
		if(year<1900 || year >9999){
			throw new NullPointerException("年度必须大于等于1900年小于等于9999年");
		}
		//实现思路,首先计算当年有多少个周,然后找到每个周的开始日期和结束日期
		// Calendar calendar = new GregorianCalendar();
		// // 在具有默认语言环境的默认时区内使用当前时间构造一个默认的 GregorianCalendar。
		// calendar.setFirstDayOfWeek(Calendar.MONDAY); //设置每周的第一天为星期一
		// calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); //每周从周一开始
		// 上面两句代码配合,才能实现,每年度的第一个周,是包含第一个星期一的那个周。
		// calendar.setMinimalDaysInFirstWeek(7); //设置每周最少为7天
		// calendar.set(Calendar.YEAR, year); // 设置年度为指定的年
		//首先计算当年有多少个周,每年都至少有52个周,个别年度有53个周
		int weeks = getWeekNumByYear(year);
		// System.out.println(year+"共有"+weeks+"个周");
		List<String[]> result = new ArrayList<String[]>(weeks);
		for(int i=1;i<=weeks;i++){
		String[] tempWeek = new String[2];
		tempWeek[0] = getYearWeekFirstDay(year,i);
		tempWeek[1] = getYearWeekEndDay (year,i);
		//或者使用下面的代码,不过发现效率更低
		// tempWeek[0] = getDateAdd(firstWeekDay,(i-1)*7+0);
		// tempWeek[1] = getDateAdd(firstWeekDay,(i-1)*7+6);
		result.add(tempWeek);
		// System.out.println(i+"="+tempWeek[0]+"_"+tempWeek[1]);
		}
		return result;
	}
	/**
	* 计算指定年度共有多少个周。
	* @param year 格式 yyyy ,必须大于1900年度 小于9999年
	* @return
	*/
	public static int getWeekNumByYear(final int year){
		if(year<1900 || year >9999){
			throw new NullPointerException("年度必须大于等于1900年小于等于9999年");
		}
		int result = 52;//每年至少有52个周 ,最多有53个周。
		String date = getYearWeekFirstDay(year,53);
		if(date.substring(0, 4).equals(year+"")){ //判断年度是否相符,如果相符说明有53个周。
			result = 53;
		}
		return result;
	}
	/**
	* 计算某年某周的开始日期
	* @param yearNum 格式 yyyy ,必须大于1900年度 小于9999年
	* @param weekNum 1到52或者53
	* @return 日期,格式为yyyy-MM-dd
	*/
	public static String getYearWeekFirstDay(int yearNum,int weekNum) {
		if(yearNum<1900 || yearNum >9999){
			throw new NullPointerException("年度必须大于等于1900年小于等于9999年");
		}
		Calendar cal = Calendar.getInstance();
		cal.setFirstDayOfWeek(Calendar.MONDAY); //设置每周的第一天为星期一
		cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);//每周从周一开始
		// 上面两句代码配合,才能实现,每年度的第一个周,是包含第一个星期一的那个周。
		cal.setMinimalDaysInFirstWeek(7); //设置每周最少为7天
		cal.set(Calendar.YEAR, yearNum);
		cal.set(Calendar.WEEK_OF_YEAR, weekNum);
		//分别取得当前日期的年、月、日
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd 00:00:00");
		return sdf.format(cal.getTime());
	}
	/**
	* 计算某年某周的结束日期
	* @param yearNum 格式 yyyy ,必须大于1900年度 小于9999年
	* @param weekNum 1到52或者53
	* @return 日期,格式为yyyy-MM-dd
	*/
	public static String getYearWeekEndDay(int yearNum,int weekNum) {
		if(yearNum<1900 || yearNum >9999){
			throw new NullPointerException("年度必须大于等于1900年小于等于9999年");
		}
		Calendar cal = Calendar.getInstance();
		cal.setFirstDayOfWeek(Calendar.MONDAY); //设置每周的第一天为星期一
		cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);//每周从周一开始
		// 上面两句代码配合,才能实现,每年度的第一个周,是包含第一个星期一的那个周。
		cal.setMinimalDaysInFirstWeek(7); //设置每周最少为7天
		cal.set(Calendar.YEAR, yearNum);
		cal.set(Calendar.WEEK_OF_YEAR, weekNum);
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd 23:59:59");
		return sdf.format(cal.getTime());
	}
	public static String getFormatDate(Date datsee){
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		return sdf.format(datsee);
	}
	public static List<String> getWeeksByYear2(final int year){
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		if(year<1900 || year >9999){
			throw new NullPointerException("年度必须大于等于1900年小于等于9999年");
		}
		int weeks = getWeekNumByYear(year);
		Date today = new Date();
		//System.out.println("今年:"+sdf.format(today).substring(0,4));
		int year2 = Integer.parseInt(sdf.format(today).substring(0,4));
		// System.out.println(year+"共有"+weeks+"个周");
		List<String> result = new ArrayList<String>(weeks);
		for(int i=1;i<=weeks;i++){
			String str = "";
			try {
				if(year2 == year){
					if(getWeekOfYear(sdf.parse(sdf.format(today))) == i){
						str = "本周";
					}else{
						str = "第"+i+"周";
					}
				}else{
					str = "第"+i+"周";
				}
				
			} catch (ParseException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			result.add(str);
		}
		return result;
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_43239106/article/details/84838162