最近项目用到,特此记录。
public class Test {
public static void main(String[] args) {
System.out.println(getNeedDate());
System.out.println(getLastDayOfWeek(getNeedDate()));
System.out.println(getFirstDayOfWeek(getNeedDate()));
String[] weekByDate = getWeekByDate(getNeedDate());
System.out.println(Arrays.toString(weekByDate));
}
/**
* 根据当前日期获取三周后日期
*/
public static Date getNeedDate(){
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DAY_OF_MONTH,21);
return calendar.getTime();
}
/**
* 获取指定日期所在周的周一
*
* @param date 日期
*/
public static String getFirstDayOfWeek(Date date) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
Calendar c = Calendar.getInstance();
c.setTime(date);
if (c.get(Calendar.DAY_OF_WEEK) == 1) {
c.add(Calendar.DAY_OF_MONTH, -1);
}
c.add(Calendar.DATE, c.getFirstDayOfWeek() - c.get(Calendar.DAY_OF_WEEK) + 1);
return simpleDateFormat.format(c.getTime());
}
/**
* 获取指定日期所在周的周日
*
* @param date 日期
*/
public static String getLastDayOfWeek(Date date) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
Calendar c = Calendar.getInstance();
c.setTime(date);
// 如果是周日直接返回
if (c.get(Calendar.DAY_OF_WEEK) == 1) {
return simpleDateFormat.format(date);
}
c.add(Calendar.DATE, 7 - c.get(Calendar.DAY_OF_WEEK) + 1);
return simpleDateFormat.format(c.getTime());
}
/**
* 获取指定日期所在周的每一天的日期(周一,周二,周三。。。)
* @param time
* @return
*/
private static String [] getWeekByDate(Date time) {
String [] week = new String[7];
SimpleDateFormat sdf = new SimpleDateFormat("dd日"); // 设置时间格式
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);// 根据日历的规则,给当前日期减去星期几与一个星期第一天的差值
for (int i = 0; i < week.length; i++) {
week[i] = sdf.format(cal.getTime());
cal.add(Calendar.DATE, 1);
}
return week;
}
}