下周的某天特定日期
需求场景:在特定需求场景中,需要获取下周某一天的日期(比如下周二)
场景举例: 预约会议室,每周需要预约下周二的会议室,需要自动填写预约日期,如何获取下周二日期。
代码功能实现:
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;
/**
* @author SeaquakeWu
* @date 2024-05-10
*/
public class DateTest {
private static final String FORMAT_PATTERN = "yyyy-MM-dd";
private static final ThreadLocal<SimpleDateFormat> sdf = ThreadLocal.withInitial(DateTest::initSdf);
/**
* 初始SimpleDateFormat,设置时区,使用ThreadLocal保证线程安全
*
* @return
*/
private static final SimpleDateFormat initSdf() {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat();
simpleDateFormat.setTimeZone(TimeZone.getTimeZone("GMT+8"));
return simpleDateFormat;
}
/**
* 获取下周某天特定日期(参数代表周几)
*
* @param weekDay 传入数字1-7,对应周一至周日
* @return 下周特定日期字符串
*/
public static String getSpecificDate(int weekDay) {
Date date = new Date();
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
//获取本周一
int currDayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
if (1 == currDayOfWeek) {
calendar.add(Calendar.DAY_OF_MONTH, -1);
}
calendar.setFirstDayOfWeek(Calendar.MONDAY);
int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
calendar.add(Calendar.DATE, calendar.getFirstDayOfWeek() - dayOfWeek);
// 获取下周日期
Calendar nextCalendar = Calendar.getInstance();
nextCalendar.setTime(calendar.getTime());
nextCalendar.add(Calendar.DATE, 6 + weekDay);
//格式化日期,按要求返回字符串或者日期类型,当前返回字符串
SimpleDateFormat simpleDateFormat = sdf.get();
simpleDateFormat.applyPattern(FORMAT_PATTERN);
//下周日期字符串
String NestWeekDate = simpleDateFormat.format(nextCalendar.getTime());
return NestWeekDate;
}
public static void main(String[] args) {
// 当前日期:2024-05-10
// 进行测试
// 1 获取下周二 实际日期:2024-05-14; 执行结果:2024-05-14
System.out.println(getSpecificDate(2));
// 2 获取下周五 实际日期:2024-05-17; 执行结果:2024-05-17
System.out.println(getSpecificDate(5));
}
}
特别说明:本文章内容只是做参考,有问题可以留言讨论,首次写博客,请大家多多支持,谢谢。