获取下周的某天特定日期

下周的某天特定日期

需求场景:在特定需求场景中,需要获取下周某一天的日期(比如下周二
场景举例: 预约会议室,每周需要预约下周二的会议室,需要自动填写预约日期,如何获取下周二日期。

代码功能实现:

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));

    }

}

特别说明:本文章内容只是做参考,有问题可以留言讨论,首次写博客,请大家多多支持,谢谢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值