java 根据时间段获取横跨的周

工具类


public static List<String> getWeekStartAndEnd(String startTimStamp, String endTimStamp) {
		try {
			List<String> datas = new ArrayList<String>();
			
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); // 设置时间格式
			Date startTime = sdf.parse(startTimStamp);
			Date endTime = sdf.parse(endTimStamp);
			//开始时间年份
			Calendar cal1 = Calendar.getInstance();
			cal1.setTime(startTime);
			int startYear = cal1.get(Calendar.YEAR);
			//结束时间年份
			Calendar cal2 = Calendar.getInstance();
			cal2.setTime(endTime);
			int endYear = cal2.get(Calendar.YEAR);
			//获取第几周
			int startWeekNo = getWeekOfYear(startTime);
			int endWeekNo = getWeekOfYear(endTime);
			//如果年份相同
			if(startYear == endYear) {
				if(startWeekNo != endWeekNo) {
					while(startWeekNo <= endWeekNo) {
						String startStr = getStartDayOfWeekNo(startYear, startWeekNo);
						String endStr = getEndDayOfWeekNo(startYear, startWeekNo);
						datas.add(getTimeStampPattern2(startStr, endStr));
						startWeekNo++;
					}
				}else {
					String startStr = getStartDayOfWeekNo(startYear, startWeekNo);
					String endStr = getEndDayOfWeekNo(startYear, startWeekNo);
					datas.add(getTimeStampPattern2(startStr, endStr));
				}
				
			}else {
				int startWeekTotal = getMaxWeekNumOfYear(startYear);
				if(startWeekNo != startWeekTotal) {
					while(startWeekNo < startWeekTotal) {
						String startStr = getStartDayOfWeekNo(startYear, startWeekNo);
						String endStr = getEndDayOfWeekNo(startYear, startWeekNo);
						datas.add(getTimeStampPattern2(startStr, endStr));
						startWeekNo++;
					}
				}else {
					String startStr = getStartDayOfWeekNo(startYear, startWeekNo);
					String endStr = getEndDayOfWeekNo(startYear, startWeekNo);
					datas.add(getTimeStampPattern2(startStr, endStr));
				}
				
				if(endWeekNo == startWeekTotal && cal2.get(Calendar.MONTH) == 0) {
				}else {
					int endWeekTotal = 1;
					if(endWeekTotal != endWeekNo) {
						while(endWeekTotal <= endWeekNo) {
							String startStr = getStartDayOfWeekNo(endYear, endWeekTotal);
							String endStr = getEndDayOfWeekNo(endYear, endWeekTotal);
							datas.add(getTimeStampPattern2(startStr, endStr));
							endWeekTotal++;
						}
					}else {
						String startStr = getStartDayOfWeekNo(endYear, endWeekTotal);
						String endStr = getEndDayOfWeekNo(endYear, endWeekTotal);
						datas.add(getTimeStampPattern2(startStr, endStr));
					}
				}
				
				
			}
			
			return datas;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}
	
	// 获取当前时间所在年的最大周数
	public static int getMaxWeekNumOfYear(int year) {
		Calendar c = new GregorianCalendar();
		c.set(year, Calendar.DECEMBER, 31, 23, 59, 59);

		return getWeekOfYear(c.getTime());
	}

	// 获取当前时间所在年的周数
	public static int getWeekOfYear(Date date) {
		Calendar c = new GregorianCalendar();
		c.setFirstDayOfWeek(Calendar.MONDAY);
		c.setMinimalDaysInFirstWeek(7);
		c.setTime(date);

		return c.get(Calendar.WEEK_OF_YEAR);
	}

	// 获取这一年的日历
	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;
	}

	//获取某一年的某一周的周日日期
	public static String getEndDayOfWeekNo(int year, int weekNo) {
		Calendar cal = getCalendarFormYear(year);
		cal.setFirstDayOfWeek(Calendar.MONDAY);
		cal.setMinimalDaysInFirstWeek(7);
		cal.set(Calendar.WEEK_OF_YEAR, weekNo);
		cal.add(Calendar.DAY_OF_WEEK, 6);
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		Date endDate = cal.getTime();
		String endDateString = sdf.format(endDate);
		return endDateString;
	}

	//获取某一年的某一周的周一日期
	public static String getStartDayOfWeekNo(int year, int weekNo) {
		Calendar cal = getCalendarFormYear(year);
		cal.setFirstDayOfWeek(Calendar.MONDAY);
		cal.setMinimalDaysInFirstWeek(7);
		cal.set(Calendar.WEEK_OF_YEAR, weekNo);
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		Date startDate = cal.getTime();
		String startDateString = sdf.format(startDate);
		return startDateString;

	}
	
	public static String getTimeStampPattern2(String startStr, String endStr){
        return startStr + " ~ " + endStr;
    }

    public static void main(String[] args) {
        getWeekStartAndEnd("2021-01-04", "2021-03-04");
    }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值