给定一个日期计算这个日期是当年的第几周

给定一个日期计算这个日期是当年的第几周

求出带入的年份1.1是周几,设定为一周的开始,再计算当前的日期是一年的第几周

/**
	 * 计算出当年的1月1号是星期几,再计算出当前日期是一年中的第几周(以实际一年1.1星期为准)
	 * @param dateStr
	 * @return
	 * @throws Exception 
	 */
	public static int weekOfYear3(String dateStr) throws Exception{
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");  
		Date date = format.parse(dateStr);  
		Calendar calendar = Calendar.getInstance(); 
		//获取当年的1.1号是星期几
		Calendar cal = Calendar.getInstance();
		cal.set(Integer.valueOf(dateStr.substring(0, 4)), 0, 1);//日期设置成当前带入年的1.1号
		int dayOfWeek=cal.get(cal.DAY_OF_WEEK);//这里求出的日期要去Calendar.SATURDAY 星期的值去对应
		calendar.setFirstDayOfWeek(dayOfWeek); //当年1.1号星期
		calendar.setTime(date);
//如果dateStr=2020-12-34转换后是2021-01-03  一般不会出现这种情况,因为前端输入一般都是用的时间控件
		//if(!format.format(calendar.getTime()).equals(dateStr)) throw new Exception("转换后的时间和带入的时间不一致");
		if(calendar.get(Calendar.WEEK_OF_YEAR)==1 && calendar.get(Calendar.MONTH)+1==12){
			if(calendar.get(Calendar.DAY_OF_YEAR)==366 && calendar.get(Calendar.DATE)==31 && dayOfWeek==Calendar.SATURDAY){//如果一年366天,第一天是周六,则可能出现54周
				return 54;//2000.12.31号是第54周
			}else{
				return 53;//如果求出的是第一周,并且月份是12月,直接返回第53周
			}
		}
		return calendar.get(Calendar.WEEK_OF_YEAR);
	}

固定一周的开始是周天,计算当前日期是一年的第几周

/**
	 * 
	 * @Title:        获取当前日期是本年的第几周 (周日开始)
	 * @param:        dateStr指定日期
	 * @param:        @return    
	 * @return:       int    
	 */
	public static int weekOfYear4(String dateStr){
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");  
		Date date = null;  
		try {  
			date = format.parse(dateStr);  
		} catch (ParseException e) {  
			e.printStackTrace();  
		}  
		   
		Calendar calendar = Calendar.getInstance();  
		calendar.setFirstDayOfWeek(Calendar.SUNDAY);  
		calendar.setTime(date);  
		if(calendar.get(Calendar.WEEK_OF_YEAR)==1 && calendar.get(Calendar.MONTH)+1==12){
			if(calendar.get(Calendar.DAY_OF_YEAR)==366 && calendar.get(Calendar.DATE)==31){//如果一年366天,第一天是周六,则可能出现54周
				Calendar cal = Calendar.getInstance();  
				cal.set(Integer.valueOf(dateStr.substring(0, 4)), 0, 1);//日期设置成当前带入年的1.1号
				int dayOfWeek=cal.get(cal.DAY_OF_WEEK);//这里求出的日期要去Calendar.SATURDAY 星期的值去对应
				if(dayOfWeek==Calendar.SATURDAY) return 54;//2020.12.31号是第54周
				return 53;
			}else{
				return 53;//如果求出的是第一周,并且月份是12月,直接返回第53周
			}
		}
		return calendar.get(Calendar.WEEK_OF_YEAR); 
	}

测试

public static void main(String args[]){
		Calendar calendar = Calendar.getInstance();  
		calendar.set(2007, 11, 31);
		System.out.println(calendar.getFirstDayOfWeek());
		System.out.println(calendar.get(Calendar.DAY_OF_YEAR));
		System.out.println(weekOfYear4("2012-12-31"));
	}

测试的用例

2000 年12.31 号属于第54周
2028年12.31号是属于第54周

星期天一周的开始
闰年 1.1号从周一到周天
2024 1.1周一 6+517+3
2008 1.1周二 5+51
7+4
2020 1.1周三 4+517+5
2004 1.1周四 3+51
7+6
2016 1.1周五 2+517+7
2000 1.1周六 1+52
7+1
2012 1.1周天 0+52*7+2

517=357
52
7=364

平年 355天
2007 1.1周一 6+517+2=6+357+2
2019 1.1周二 5+51
7+3=5+357+3
2014 1.1周三 4+517+4=4+357+4
2009 1.1周四 3+51
7+5=3+357+5
2010 1.1周五 2+517+6=2+357+6
2011 1.1周六 1+51
7+7=1+357+7
2017 1.1周天 52*7

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值