使用 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 加入
软件开发工程师
评论