此方法是通过传入的int来控制的 获取的数据为一个自然周( -1 当前 0 上周 1 大上周 以此类推进行的参数的传递)。直接用getWeekByDate方法即可
package com.hisense.smartroad.saf.week.service;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
public class Test {
static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); // 设置时间格式
/**
* 获取上周一到上周日 -1 当前 0 上周 1 大上周
*/
public static Map<String, Date> getWeekByDate(Date date, int x) {
Calendar cal = Calendar.getInstance();
if (date == null) {
date = new Date();
}
cal.setTime(date);
Map<String, Date> map = new HashMap<String, Date>();
int n = cal.get(Calendar.DAY_OF_WEEK) - 1;
if (n == 0) {
n = 7;
}
cal.add(Calendar.DATE, -(7 + (n - 1) + 7 * x));
Date monday = cal.getTime();
map.put("monday", monday);
cal.add(Calendar.DATE, 6);
Date sunday = cal.getTime();
map.put("sunday", sunday);
/*
* String imptimeEnds = sdf.format(sunday);
* System.out.println(imptimeEnds);
*/
return map;
}
public void getWeekByDate(Date time) {
Calendar cal = Calendar.getInstance();
cal.setTime(time);
// 判断要计算的日期是否是周日,如果是则减一天计算周六的,否则会出问题,计算到下一周去了
int dayWeek = cal.get(Calendar.DAY_OF_WEEK);// 获得当前日期是一个星期的第几天
if (1 == dayWeek) {
cal.add(Calendar.DAY_OF_MONTH, -1);
}
System.out.println("要计算日期为:" + sdf.format(cal.getTime())); // 输出要计算日期
cal.setFirstDayOfWeek(Calendar.MONDAY);// 设置一个星期的第一天,按中国的习惯一个星期的第一天是星期一
int day = cal.get(Calendar.DAY_OF_WEEK);// 获得当前日期是一个星期的第几天
cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - day);// 根据日历的规则,给当前日期减去星期几与一个星期第一天的差值
String imptimeBegin = sdf.format(cal.getTime());
System.out.println("所在周星期一的日期:" + imptimeBegin);
cal.add(Calendar.DATE, 6);
String imptimeEnd = sdf.format(cal.getTime());
System.out.println("所在周星期日的日期:" + imptimeEnd);
}
public static Date strToDate(String source) {
Date date = new Date();
try {
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
date = df.parse(source);
} catch (Exception e) {
e.printStackTrace();
}
return date;
}
public static void main(String[] args) {
getWeekByDate(strToDate("2019-01-01"));
getWeekByDate(strToDate("2019-01-01"), -1);
getWeekByDate(strToDate("2019-01-01"), 0);
getWeekByDate(strToDate("2019-01-01"), 1);
}
}