使用 Java 获取给定日期所在周的第一天
作者:Liin
- 2022 年 7 月 17 日
本文字数:1396 字
阅读完需:约 5 分钟

最近有业务场景使用到统计某一天所在周的数据,且周的计算周期是从周四至下周三。因此需要开发一个工具,输入一个日期,并返回这个日期所在周的第一天。从互联网上检索了一下没有类似工具分享,于是自己动手写了一段,分享出来,方便大家参考。
/** * 获取指定日期所在周的第一天,支持指定周的开始时间 * 注意:周数定义与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
版权声明: 本文为 InfoQ 作者【Liin】的原创文章。
原文链接:【http://xie.infoq.cn/article/d9204fb2f8f0fda65dfab59d8】。文章转载请联系作者。
Liin
关注
文字,是一种表达方式 2017.12.22 加入
软件开发工程师










评论