背景
一种常见的需求是获取当前时刻的过去24小时小时数、过去一周的日期,过去一个月的日期等等,由于该类需求比较常用,而且其中也涉及闰月、平月的概念,故把这几个方法整理了一下以备不时之需。
实现
分别对过去24小时、过去一周、过去一个月需要返回的东西进行抽象成POJO类,其中参数可根据实际需求自定义修改。
以下类设置两个list存放过去24小时的日期数+小时数,以及小时数。
@Data
public class Last24HourInfo {
/**
* 过去24小时的日期数+小时数(如11-25 5 时)
*/
private List<String> hourStrList;
/**
* 过去24小时的小时数整形数据list
*/
private List<Integer> hourIntList;
}
以下POJO类设置三个list存放过去一周的各类数据
@Data
public class LastWeekDateInfo {
/**
* 周一至周日的list
*/
private List<String> weekList;
/**
* 过去一周的日期(月-日)的list
*/
private List<String> dateStrList;
/**
* 过去一周的日期(日)整形数据的list
*/
private List<Integer> dateIntList;
}
另外把周几定义为枚举类,以便后续使用
public enum EnumWeekInfo {
MON(1,"周一"),
TUE(2,"周二"),
WEN(3,"周三"),
THURS(4,"周四"),
FRI(5,"周五"),
SAT(6,"周六"),
SUN(7,"周日");
private Integer dateCode;
private String dateMsg;
EnumWeekInfo(Integer dateCode,String dateMsg){
this.dateCode = dateCode;
this.dateMsg = dateMsg;
}
public static String getWeekValue(int dateCode){
for (EnumWeekInfo meta:EnumWeekInfo.values()){
if (meta.dateCode==dateCode){
return meta.dateMsg;
}
}
return null;
}
}
以下POJO类设置两个list存放过去一个月的日期各类数据
@Data
public class LastMonthInfo {
/**
* 过去一个月的日期字符型数据list
*/
private List<String> dateStrList;
/**
* 过去一个月的日期整型数据list
*/
private List<Integer> dateIntList;
}
最后,工具类中的方法如下
public static LastWeekDateInfo getLastWeekDate(){
List<String> dayOfWeekList = new ArrayList<>(7);
List<String> strDayOfMonthList = new ArrayList<>(7);
List<Integer> intDayOfMonthList = new ArrayList<>(7);
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
//确定dayOfWeek的起始位置,周日为1,以此类推
int startIndex;
//若当天为周日
if (1==dayOfWeek){
startIndex = 1;
for (int j = startIndex; j < 8; j++){
dayOfWeekList.add(EnumWeekInfo.getWeekValue(j));
}
}else {
startIndex = dayOfWeek;
for (int k = startIndex; k <=7; k++){
dayOfWeekList.add(EnumWeekInfo.getWeekValue(k));
}
for (int l = 1; l < dayOfWeek; l++){
dayOfWeekList.add(EnumWeekInfo.getWeekValue(l));
}
}
//获取dayOfMonth的起始位置
if (dayOfMonth>=7){
int dayBegin = dayOfMonth - 6;
int currentMonth = calendar.get(Calendar.MONTH)+1;
for (int i = dayBegin; i <= dayOfMonth; i++){
intDayOfMonthList.add(i);
strDayOfMonthList.add(currentMonth+"-"+i);
}
}else {
int complimentCnt = 7 - dayOfMonth;
calendar.set(Calendar.DAY_OF_MONTH,0);
int preMonth = calendar.get(Calendar.MONTH)+1;
int lastEnd = calendar.get(Calendar.DAY_OF_MONTH);
int dayOfMonthStartIndex = lastEnd - complimentCnt +1;
for (int m = dayOfMonthStartIndex; m <=lastEnd;m++){
strDayOfMonthList.add(preMonth+"-"+m);
intDayOfMonthList.add(m);
}
calendar = Calendar.getInstance();
calendar.setTime(new Date());
int currentMonth = calendar.get(Calendar.MONTH)+1;
for (int n = 1; n <= dayOfMonth; n++){
strDayOfMonthList.add(currentMonth+"-"+n);
intDayOfMonthList.add(n);
}
}
LastWeekDateInfo lastWeekDateInfo = new LastWeekDateInfo();
lastWeekDateInfo.setDateStrList(strDayOfMonthList);
lastWeekDateInfo.setWeekList(dayOfWeekList);
lastWeekDateInfo.setDateIntList(intDayOfMonthList);
return lastWeekDateInfo;
}
public static Last24HourInfo getLast24Hour(){
List<Integer> timeIntList = new ArrayList<>(24);
List<String> timeStrList = new ArrayList<>(24);
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
int monthOfToday = calendar.get(Calendar.MONTH)+1;
int dateOfToday = calendar.get(Calendar.DAY_OF_MONTH);
int hour = calendar.get(Calendar.HOUR_OF_DAY);
calendar.add(Calendar.DATE,-1);
int monthOfLastDay = calendar.get(Calendar.MONTH)+1;
int dateOfLastDay = calendar.get(Calendar.DATE);
//确定起始位置
int startIndex;
if (0==hour){
//整形数据List是0-23
startIndex = 0;
//往前推一天
for (int j = startIndex; j < 24; j++){
timeIntList.add(j);
timeStrList.add(monthOfLastDay+"-"+dateOfLastDay+" "+j);
}
}else {
//分两段
startIndex = hour + 1;
for (int k = startIndex; k < 24; k++){
timeIntList.add(k);
timeStrList.add(monthOfLastDay+"-"+dateOfLastDay+" "+k);
}
for (int l = 0; l <= hour; l++){
timeIntList.add(l);
timeStrList.add(monthOfToday+"-" + dateOfToday+" "+l);
}
}
Last24HourInfo last24HourInfo = new Last24HourInfo();
last24HourInfo.setHourIntList(timeIntList);
last24HourInfo.setHourStrList(timeStrList);
return last24HourInfo;
}
public static LastMonthInfo getLastMonthDate(){
List<Integer> dayIntList = new ArrayList<>(31);
List<String> dayStrList = new ArrayList<>(31);
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
int currentMonth = calendar.get(Calendar.MONTH)+1;
int currentDate = calendar.get(Calendar.DAY_OF_MONTH);
calendar.set(Calendar.DAY_OF_MONTH,0);
int lastMonth = calendar.get(Calendar.MONTH)+1;
int lastEnd = calendar.get(Calendar.DAY_OF_MONTH);
//确定起始位置
int startIndex;
if (currentDate>=30){
startIndex = 1;
for (int j = startIndex; j <= currentDate; j++){
dayIntList.add(j);
dayStrList.add(currentMonth+"-"+j);
}
}else {
startIndex = currentDate + 1;
for (int k = startIndex; k <= lastEnd; k++){
dayIntList.add(k);
dayStrList.add(lastMonth+"-"+k);
}
for (int l = 1; l <= currentDate; l++){
dayIntList.add(l);
dayStrList.add(currentMonth + "-" +l);
}
}
LastMonthInfo lastMonthInfo = new LastMonthInfo();
lastMonthInfo.setDateIntList(dayIntList);
lastMonthInfo.setDateStrList(dayStrList);
return lastMonthInfo;
}
以上代码亲测运行正确!