网站首页 > 基础教程 正文
计算日期属于当月第几周(日期周计算)
本文周计算时间方式为:当月第一个周一为第一周 计算
- 获取月第一个周一、从当月第一天开始找
- 第一个周一时间与 sourceTime [传入时间对比],sourceTime在第一个周一时间之前 表示属于上月的
- sourceTime 与第一个周一时间差,再以7天计算
/**
* @author aiyuan
* @date 2021/7/27
*/
public class DateWeekUtil {
/**
*获取当月第一天
*/
public static LocalDateTime getFirstLocalDayOfMonth(LocalDateTime localDateTime) {
return localDateTime.with(TemporalAdjusters.firstDayOfMonth()).with(LocalTime.MIN);
}
/**
*获取当月第一周 以第一个周一为准
*/
private static LocalDateTime getFirstMonday(LocalDateTime sourceTime) {
LocalDateTime firstMondayOfMonth = getFirstLocalDayOfMonth(sourceTime);
for (int i = 0; i < 6; i++) {
DayOfWeek dayOfWeekTemp = firstMondayOfMonth.getDayOfWeek();
if (dayOfWeekTemp.equals(DayOfWeek.MONDAY)) {
break;
}
//往后推一天
firstMondayOfMonth = firstMondayOfMonth.plusDays(1);
}
return firstMondayOfMonth;
}
/**
* 获取几月份的第几周 [X月份第X周]
*
*/
public static String getMonthNoAndWeekNo(LocalDateTime sourceTime) {
String monthNoAndWeekNo;
//获取当月的第一天
//获取月第一个周一,从当月第一天开始找
LocalDateTime firstMondayOfMonth = getFirstMonday(sourceTime);
//比较当月的第一个星期一 < = 参数时间
if (firstMondayOfMonth.isBefore(sourceTime) || firstMondayOfMonth.isEqual(sourceTime)) {
//当月第一个周一在当前时间之前 firstMondayOfMonth<=sourceTime
//计算两个时间间隔天数
int dayOfMonthFirstMonday = firstMondayOfMonth.getDayOfMonth();
int dayOfMonthSourceTime = sourceTime.getDayOfMonth();
int diffDays = dayOfMonthSourceTime - dayOfMonthFirstMonday;
//第几周weekNo
int weekNo = (diffDays / 7) + 1;
//月份
int monthNo = sourceTime.getMonth().getValue();
monthNoAndWeekNo = monthNo + "月份" + "第" + weekNo + "周";
} else {
//如果当月的第一个周一大于参数时间,则要计算到上个月份去
//获取上一个月的第一个周一
LocalDateTime lastMontLocalDateTime = sourceTime.minusMonths(1);
//上个月的第一天
//从上个月的第一天开始找周一
LocalDateTime firstMondayOfMonthLast = getFirstMonday(lastMontLocalDateTime);
// 计算两个时间间隔天数 (上月第一个周一 减去 当前时间)
Duration duration = Duration.between(firstMondayOfMonthLast, sourceTime);
long diffDays = duration.toDays(); //相差的天数
//第几周weekNo
long weekNo = (diffDays / 7) + 1;
//月份
int monthNo = firstMondayOfMonthLast.getMonth().getValue();//汉字版月份
monthNoAndWeekNo = monthNo + "月份" + "第" + weekNo + "周";
}
return monthNoAndWeekNo;
}
}
猜你喜欢
- 2024-10-23 Java Date 转 LocalDate javadate转localdate
- 2024-10-23 java date对象的正确使用方法 java中date
- 2024-10-23 「案例学习」Java8 日期时间 「案例学习」Java8 日期时间范围
- 2024-10-23 SpringBoot反序列化LocalDateTime总失败
- 2024-10-23 Java 8 LocalDate类入门实战:初学者必读的用法详解与概念梳理
- 2024-10-23 SpringBoot中时间戳和LocalDate相关的接收和转换
- 2024-10-23 从LocalDateTime序列化探讨全局一致性序列化
- 2024-10-23 面试必备:ThreadLocal详解 threadlocale
- 2024-10-23 Java,java.time.LocalDate,根据具体的时间,每一日(天)递增
- 2024-10-23 Java LocalDate 类 和 Date 类 java中date类型
- 最近发表
- 标签列表
-
- jsp (69)
- pythonlist (60)
- gitpush (78)
- gitreset (66)
- python字典 (67)
- dockercp (63)
- gitclone命令 (63)
- dockersave (62)
- linux命令大全 (65)
- mysql教程 (60)
- pythonif (68)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- console.table (62)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)