写点什么

使用 Java 获取给定日期所在周的第一天

作者:Liin
  • 2022 年 7 月 17 日
  • 本文字数:1396 字

    阅读完需:约 5 分钟

使用Java获取给定日期所在周的第一天

最近有业务场景使用到统计某一天所在周的数据,且周的计算周期是从周四至下周三。因此需要开发一个工具,输入一个日期,并返回这个日期所在周的第一天。从互联网上检索了一下没有类似工具分享,于是自己动手写了一段,分享出来,方便大家参考。

    /**     * 获取指定日期所在周的第一天,支持指定周的开始时间     * 注意:周数定义与Calendar的周数开始时间相同,星期天(Calendar.SUNDAY)的值为 1     * @param date 给定日期     * @param weekFirstDay 指定周的开始时间     * @return 该给定日期所在周的第一天     */    public static Date getFirstDayStartTimeOfWeek(Date date,int weekFirstDay){
Calendar instance = Calendar.getInstance(); instance.setTime(date); //今天的星期数 int currentDayOfWeek = instance.get(Calendar.DAY_OF_WEEK);
Date dayStartTime = null; if (currentDayOfWeek < weekFirstDay){ dayStartTime = getDayStartTime(instance.getTime(), -(currentDayOfWeek + (7 - weekFirstDay))); } if (currentDayOfWeek == weekFirstDay){ dayStartTime = getDayStartTime(instance.getTime(), 0); } if (currentDayOfWeek > weekFirstDay){ dayStartTime = getDayStartTime(instance.getTime(), -(currentDayOfWeek - weekFirstDay)); } return dayStartTime; }
/** * 获取当天0点时刻 * * @param date 日期 * @param day 需要 interval 的天数 * @return */ public static Date getDayStartTime(Date date, Integer day) { if (date == null) { return null; } return getIntervalDay(date, day, 0, 0, 0,0); }
/** * 获取固定时间的yyyy-MM-dd 00:00:00 * * @param day 需要间隔的天数 * @param hour 指定小时 * @param minute 指定分钟 * @param second 指定秒 * @param millisecond 指定毫秒 * @return */ public static Date getIntervalDay(Date date, Integer day, Integer hour, Integer minute, Integer second,Integer millisecond) { Calendar cal = Calendar.getInstance(); cal.setTime(date); if (Objects.nonNull(day) && day != 0) { cal.add(Calendar.DATE, day); } cal.set(Calendar.HOUR_OF_DAY, hour); cal.set(Calendar.MINUTE, minute); cal.set(Calendar.SECOND, second); cal.set(Calendar.MILLISECOND,millisecond); return cal.getTime(); }
复制代码


运行一下

    public static void main(String[] args) {        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");        Date firstDayStartTimeOfWeek = getFirstDayStartTimeOfWeek(new Date(), Calendar.THURSDAY);        System.out.println(dateFormat.format(firstDayStartTimeOfWeek));    }
复制代码

假如今天是:2022 年 7 月 17 日,指定一周开始时间是周四,则运行结果如下:

2022-07-14 00:00:00.000
复制代码

得到该周的开始日期为 2022-07-14 00:00:00.000


代码运行于 java8

发布于: 刚刚阅读数: 4
用户头像

Liin

关注

文字,是一种表达方式 2017.12.22 加入

软件开发工程师

评论

发布
暂无评论
使用Java获取给定日期所在周的第一天_Java_Liin_InfoQ写作社区