前言
最近有个需求,需要查询前2个自然周的数据作对比,那首先要考虑的就是怎么获取前2个自然周的时间,查了下网上发现太乱了,自己考虑了下自己写个,思路也很简单,就是在当前时间基础上,往前偏移。
例如:当天是2021年2月07号
上周的自然周时间【2021-01-25 00:00:00 ~ 2021-01-31 23:59:59】
上上周的自然周时间【2021-01-18 00:00:00 ~ 2021-01-24 23:59:59】
那如果是是2021年2月01号,结果应该和2021年2月07号获取的是一样的
依赖
导入hutool-all依赖,因为使用了hutool中时间工具类
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.3.4</version>
</dependency>
实现代码
package com.example.demo.test;
import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.Week;
import com.google.common.collect.Maps;
import java.util.HashMap;
/**
* @Author: lwh
* @Date: 2021/2/7
* @Description:
**/
public class Test28 {
public static void main(String[] args) {
HashMap<String, String> weekTime = getLastWeekTime();
System.out.println(weekTime);
}
/**
* @Author: lwh
* @Description: 获取当前时间的上周,上上周的时间。
* 例如:当天是2021年2月07号,上周的自然周时间【2021-01-25 00:00:00 ~ 2021-01-31 23:59:59】,上上周的自然周时间【2021-01-18 00:00:00 ~ 2021-01-24 23:59:59】
* @Date: 2021/2/7
* @Param: []
* @Return: java.util.HashMap<java.lang.String,java.lang.String>
**/
private static HashMap<String, String> getLastWeekTime(){
Week week = DateTime.now().dayOfWeekEnum();
switch (week) {
/** 周一 */
case MONDAY:
return getRealizeLastWeekTime(-14, -8, -7, -1);
/** 周二 */
case TUESDAY:
return getRealizeLastWeekTime(-15, -9, -8, -2);
/** 周三 */
case WEDNESDAY:
return getRealizeLastWeekTime(-16, -10, -9, -3);
/** 周四 */
case THURSDAY:
return getRealizeLastWeekTime(-17, -11, -10, -4);
/** 周五 */
case FRIDAY:
return getRealizeLastWeekTime(-18, -12, -11, -5);
/** 周六 */
case SATURDAY:
return getRealizeLastWeekTime(-19, -13, -12, -6);
/** 周日 */
case SUNDAY:
return getRealizeLastWeekTime(-20, -14, -13, -7);
default:
throw new RuntimeException("method:getLastWeekTime,获取当前时间是周几异常");
}
}
private static HashMap<String, String> getRealizeLastWeekTime(int upLastStartOffset,int upLastEndOffset,int lastStartOffset,int lastEndOffset) {
// 获取上上周的开始时间和结束时间
String startUpLastWeekTime = DateTime.now().offset(DateField.DAY_OF_YEAR, upLastStartOffset)
.setField(DateField.HOUR_OF_DAY,0).setField(DateField.MINUTE,0)
.setField(DateField.SECOND,0).setField(DateField.MILLISECOND,0).toString();
String endUpLastWeekTime = DateTime.now().offset(DateField.DAY_OF_YEAR, upLastEndOffset)
.setField(DateField.HOUR_OF_DAY,23).setField(DateField.MINUTE,59)
.setField(DateField.SECOND,59).setField(DateField.MILLISECOND,0).toString();
// 获取上周的开始时间和结束时间
String startLastWeekTime = DateTime.now().offset(DateField.DAY_OF_YEAR, lastStartOffset)
.setField(DateField.HOUR_OF_DAY,0).setField(DateField.MINUTE,0)
.setField(DateField.SECOND,0).setField(DateField.MILLISECOND,0).toString();
String endLastWeekTime = DateTime.now().offset(DateField.DAY_OF_YEAR, lastEndOffset)
.setField(DateField.HOUR_OF_DAY,23).setField(DateField.MINUTE,59)
.setField(DateField.SECOND,59).setField(DateField.MILLISECOND,0).toString();
HashMap<String, String> maps = Maps.newHashMap();
maps.put("startUpLastWeekTime", startUpLastWeekTime);
maps.put("endUpLastWeekTime", endUpLastWeekTime);
maps.put("startLastWeekTime", startLastWeekTime);
maps.put("endLastWeekTime", endLastWeekTime);
return maps;
}
}