获取今天是第几周,类似excel的WEEKNUM公式

一.java获取今天是第几周,类似excel的WEEKNUM公式,但以下周是从周一开始算。
并获取本周的开始结束时间,及上一周的开始结束时间

    static int  getWeekOfYear(String Strdate) throws ParseException{
		SimpleDateFormat f1 =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		Date d1 = f1.parse(Strdate);
		Calendar c1=Calendar.getInstance();
		c1.setFirstDayOfWeek(Calendar.MONDAY);//周设置为从周一开始
		c1.setTime(d1);
		
		int weekOfYear= c1.get(Calendar.WEEK_OF_YEAR);
		int month=c1.get(Calendar.MONTH)+1;
		if(month==12&&weekOfYear==1){//如果12月的被归为第一周,则等于上周加1周(Calendar默认1月1号的那周是第一周)
			c1.add(Calendar.DAY_OF_MONTH,-7);
			weekOfYear=c1.get(Calendar.WEEK_OF_YEAR)+1;
		}
		return weekOfYear;		
	}
	
	static String  getWeekStartTime(String Strdate) throws ParseException{
		SimpleDateFormat f1 =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		Date d1 = f1.parse(Strdate);		
		int weekOfYear= getWeekOfYear(Strdate);
		
		Calendar c2=Calendar.getInstance();
		c2.setTime(d1);
		int dayOfWeek=c2.get(Calendar.DAY_OF_WEEK)-1==0?7:c2.get(Calendar.DAY_OF_WEEK)-1;//默认周日=1,但周一开始需要-1,且周日=7
		
		if(weekOfYear==1){
			c2.set(Calendar.DAY_OF_MONTH, 1);//第一周开始是1月1号
		}else{
			c2.add(Calendar.DAY_OF_WEEK, -dayOfWeek+1);
		}
		c2.set(Calendar.HOUR_OF_DAY, 0);
		c2.set(Calendar.MINUTE, 0);
		c2.set(Calendar.SECOND, 0);
		
		String starT=f1.format(c2.getTime());
//		System.out.println("week start time:"+starT);
		return starT;
		
	}
	
	static String  getWeekEndTime(String Strdate) throws ParseException{
		SimpleDateFormat f1 =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		Date d1 = f1.parse(Strdate);		
				
		Calendar c3=Calendar.getInstance();
		c3.setFirstDayOfWeek(Calendar.MONDAY);
		c3.setTime(d1);
		
		int month=c3.get(Calendar.MONTH)+1;
		int dayOfWeek=c3.get(Calendar.DAY_OF_WEEK)-1==0?7:c3.get(Calendar.DAY_OF_WEEK)-1;//默认周日=1,但周一开始需要-1,且周日=7
		
		if(month==12&&c3.get(Calendar.WEEK_OF_YEAR)==1){//最后一周结束时间是12月31号,因为是0点所已再加1天
			c3.set(Calendar.DAY_OF_MONTH, 31);
			c3.add(Calendar.DAY_OF_YEAR, 1);
		}else{
			c3.add(Calendar.DAY_OF_WEEK, 7-dayOfWeek+1);
		}
		c3.set(Calendar.HOUR_OF_DAY, 0);
		c3.set(Calendar.MINUTE, 0);
		c3.set(Calendar.SECOND, 0);
		
		String endT=f1.format(c3.getTime());
//		System.out.println("week end time:"+endT);
		return endT;
		
	}
	
	static String  getlast1WeekStartTime(String Strdate) throws ParseException{
		SimpleDateFormat f1 =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

		String starT=getWeekStartTime(Strdate);
		Date d1 = f1.parse(starT);			
		Calendar c2=Calendar.getInstance();
		c2.setTime(d1);
		c2.add(Calendar.DAY_OF_YEAR, -1);//开始时间的1天前
		
		String last1DayOfstarT=f1.format(c2.getTime());
		String last1WeekstarT=getWeekStartTime(last1DayOfstarT);
		return last1WeekstarT;
	}
	//上一周的结束时间就是本周的开始时间,可以不用这么写:
	static String  getlast1WeekEndTime(String Strdate) throws ParseException{
		
		String last1WeekstarT=getlast1WeekStartTime(Strdate);		
		String last1WeekEndT=getWeekEndTime(last1WeekstarT);
		return last1WeekEndT;
	}

测试:

		String d1="2021-12-31 00:00:00";
		System.out.println("getWeekOfYear: "+getWeekOfYear(d1));
		System.out.println("getWeekStartTime: "+getWeekStartTime(d1));
		System.out.println("getWeekEndTime; "+getWeekEndTime(d1));
		System.out.println("getlast1WeekStartTime: "+getlast1WeekStartTime(d1));
		System.out.println("getlast1WeekEndTime: "+getlast1WeekEndTime(d1));

getWeekOfYear: 53
getWeekStartTime: 2021-12-27 00:00:00
getWeekEndTime; 2022-01-01 00:00:00
getlast1WeekStartTime: 2021-12-20 00:00:00
getlast1WeekEndTime: 2021-12-27 00:00:00

二.java获取今天是第几周,ISO周数

static SimpleDateFormat df_yyyyMMdd = new SimpleDateFormat("yyyy-MM-dd");
	
	public static int getWeekYearISO(String today) throws ParseException {
		Date date = df_yyyyMMdd.parse(today);
		Calendar calendar = Calendar.getInstance();

		calendar.setFirstDayOfWeek(Calendar.MONDAY);
		calendar.setMinimalDaysInFirstWeek(4);

		calendar.setTime(date);
		
		int w=calendar.get(Calendar.WEEK_OF_YEAR);
		System.out.println(w);
		
		return w;
		
	}

获取周开始结束时间:

static String  getWeekStartTime(String Strdate) throws ParseException{
		SimpleDateFormat f1 =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		Date d1 = f1.parse(Strdate);		
		int weekOfYear= getWeekYearISO(Strdate);
		
		Calendar c2=Calendar.getInstance();
		c2.setTime(d1);
		int dayOfWeek=c2.get(Calendar.DAY_OF_WEEK)-1==0?7:c2.get(Calendar.DAY_OF_WEEK)-1;//默认周日=1,但周一开始需要减少1,且周日=7
		
		c2.add(Calendar.DAY_OF_WEEK, -dayOfWeek+1);
		
		c2.set(Calendar.HOUR_OF_DAY, 0);
		c2.set(Calendar.MINUTE, 0);
		c2.set(Calendar.SECOND, 0);
		
		String starT=f1.format(c2.getTime());
		System.out.println("week start time:"+starT);
		return starT;
		
	}
	
	static String  getWeekEndTime(String Strdate) throws ParseException{
		SimpleDateFormat f1 =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		Date d1 = f1.parse(Strdate);		
		int weekOfYear= getWeekYearISO(Strdate);
		
		Calendar c2=Calendar.getInstance();
		c2.setTime(d1);
		int dayOfWeek=c2.get(Calendar.DAY_OF_WEEK)-1==0?7:c2.get(Calendar.DAY_OF_WEEK)-1;//默认周日=1,但周一开始需要减少1,且周日=7
		
		c2.add(Calendar.DAY_OF_WEEK, -dayOfWeek+1+7);
		
		c2.set(Calendar.HOUR_OF_DAY, 0);
		c2.set(Calendar.MINUTE, 0);
		c2.set(Calendar.SECOND, 0);
		
		String starT=f1.format(c2.getTime());
		System.out.println("week start time:"+starT);
		return starT;
		
	}
	
	static String  getlast1WeekStartTime(String Strdate) throws ParseException{
		SimpleDateFormat f1 =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

		String starT=getWeekStartTime(Strdate);
		Date d1 = f1.parse(starT);			
		Calendar c2=Calendar.getInstance();
		c2.setTime(d1);
		c2.add(Calendar.DAY_OF_YEAR, -1);//开始时间的1天前
		
		String last1DayOfstarT=f1.format(c2.getTime());
		String last1WeekstarT=getWeekStartTime(last1DayOfstarT);
		return last1WeekstarT;
	}
	
	static String  getlast1WeekEndTime(String Strdate) throws ParseException{
		SimpleDateFormat f1 =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

		String starT=getWeekStartTime(Strdate);
		return starT;
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值