No desenvolvimento, é comum obter os dados dos últimos 30 dias. Por exemplo, hoje é 20230207. Obter os 29 dias anteriores, incluindo hoje, significa avançar 29 dias. Esse tipo de cálculo de tempo não é incomum. Portanto, o seguinte será citado Uma série de cálculos sobre o tempo.
DataUtil
package com.example.utils;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import org.apache.commons.lang3.time.DateUtils;
import com.alibaba.fastjson.JSON;
public class DateUtil {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("当天24点时间:" + getTimesnight().toLocaleString());
System.out.println("去年当天24点时间:" + getLastYearTimesnight().toLocaleString());
System.out.println("当前时间:" + new Date().toLocaleString());
System.out.println("当天0点时间:" + getTimesmorning().toLocaleString());
System.out.println("去年当天0点时间:" + getLastYearTimesmorning().toLocaleString());
System.out.println("昨天0点时间:" + getYesterdaymorning().toLocaleString());
System.out.println("近7天时间:" + getWeekFromNow().toLocaleString());
System.out.println("本周周一0点时间:" + getTimesWeekmorning().toLocaleString());
System.out.println("本周周日24点时间:" + getTimesWeeknight().toLocaleString());
System.out.println("上周周一0点时间:" + getTimesLastWeekmorning().toLocaleString()); // 周环比开始
System.out.println("上周今天24点时间:" + getLastWeekTodayNight().toLocaleString()); // 周环比开始
System.out.println("本月初0点时间:" + getTimesMonthmorning().toLocaleString());
System.out.println("本月未24点时间:" + getTimesMonthnight().toLocaleString());
System.out.println("上月初0点时间:" + getLastMonthStartMorning().toLocaleString()); // 月环比开始
System.out.println("上月今天24点时间:" + getLastMonthTodayNight().toLocaleString()); // 月环比结束
System.out.println("本季度开始点时间:" + getCurrentQuarterStartTime().toLocaleString());
System.out.println("本季度结束点时间:" + getCurrentQuarterEndTime().toLocaleString());
System.out.println("本年开始点时间:" + getCurrentYearStartTime().toLocaleString());
System.out.println("本年结束点时间:" + getCurrentYearEndTime().toLocaleString());
System.out.println("上年开始点时间:" + getLastYearStartTime().toLocaleString());
// Calendar cal = Calendar.getInstance();
// System.out.println(cal.get(Calendar.WEEK_OF_YEAR));
System.out.println(getLastWeekFirst().toLocaleString());
System.out.println(getLastWeekEnd().toLocaleString());
System.out.println(JSON.toJSON(getLast7Days()));
System.out.println(JSON.toJSON(getLast30Days()));
System.out.println(JSON.toJSON(getLast12Months()));
System.out.println(JSON.toJSON(getTodayHours()));
System.out.println(JSON.toJSON(getTodayMonths()));
System.out.println(JSON.toJSON(getTodayWeeks()));
}
public static Date getLastMonthTodayNight() {
return DateUtils.addMonths(getTimesnight(), -1);
}
/**
* 当前多少小时 到现在
*
* @return 返回格式 [0,1,2...]
*/
public static List<String> getTodayHours() {
int hour = Calendar.getInstance().get(Calendar.HOUR_OF_DAY);
List<String> hours = new ArrayList<String>();
for (Integer i = 0; i <= hour; i++)
hours.add(i.toString());
return hours;
}
/**
* 当月天数 到今天
*
* @return 返回格式 ['2022-04-01', '2022-04-02', '2022-04-03'...]
*/
public static List<String> getTodayMonths() {
List<String> months = new ArrayList<String>();
Date end = getTimesnight();
for (Date begin = getTimesMonthmorning(); begin.getTime() < end.getTime(); begin = DateUtils.addDays(begin, 1))
months.add(new SimpleDateFormat("yyyy-MM-dd").format(begin));
return months;
}
/**
* 当周天数 到今天
*
* @return 返回格式 ['2022-04-01', '2022-04-02', '2022-04-03'...]
*/
public static List<String> getTodayWeeks() {
List<String> weeks = new ArrayList<String>();
Date end = getTimesnight();
for (Date begin = getTimesWeekmorning(); begin.getTime() < end.getTime(); begin = DateUtils.addDays(begin, 1))
weeks.add(new SimpleDateFormat("yyyy-MM-dd").format(begin));
return weeks;
}
/**
* 获取当前 30 天
*
* @return 返回格式 ['04-01', '04-02', '04-03'...]
*/
public static String[] getLast30Days() {
String[] last30Days = new String[30];
Calendar cal = Calendar.getInstance();
for (int i = 0; i < 30; i++) {
// 月份显示要加1
last30Days[29 - i] = String.format("%04d", cal.get(Calendar.YEAR)) + "-"
+ String.format("%02d", cal.get(Calendar.MONTH) + 1) + "-"
+ String.format("%02d", cal.get(Calendar.DAY_OF_MONTH));
// 每次减一天
cal.add(Calendar.DAY_OF_MONTH, -1);
}
return last30Days;
}
/**
* 获取当前 7 天
*
* @return 返回格式 ['04-01', '04-02', '04-03'...]
*/
public static String[] getLast7Days() {
String[] last7Days = new String[7];
Calendar cal = Calendar.getInstance();
for (int i = 0; i < 7; i++) {
// 月份显示要加1
last7Days[6 - i] = String.format("%04d", cal.get(Calendar.YEAR)) + "-"
+ String.format("%02d", cal.get(Calendar.MONTH) + 1) + "-"
+ String.format("%02d", cal.get(Calendar.DAY_OF_MONTH));
// 每次减一天
cal.add(Calendar.DAY_OF_MONTH, -1);
}
return last7Days;
}
/**
* 获取当前12 个月
*
* @param dateStr 日期字符串
*
* @return 返回格式 [2017-01,2017-02]
*/
public static String[] getLast12Months() {
String[] last12Months = new String[12];
Calendar cal = Calendar.getInstance();
for (int i = 0; i < 12; i++) {
// 正序写法: last12Months[11 - i]
last12Months[11 - i] = cal.get(Calendar.YEAR) + "-" + String.format("%02d", (cal.get(Calendar.MONTH) + 1));
cal.add(Calendar.MONTH, -1); // 逐次往前推1个月
}
return last12Months;
}
// 获得去年这周当天的时间
public static Date getLastWeekEnd() {
Calendar cal = Calendar.getInstance();
int weeks = cal.get(Calendar.WEEK_OF_YEAR);
int days = cal.get(Calendar.DAY_OF_WEEK);
cal.add(Calendar.YEAR, -1);
cal.set(Calendar.DAY_OF_WEEK, days);
cal.set(Calendar.WEEK_OF_YEAR, weeks);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.MILLISECOND, 0);
return cal.getTime();
}
// 获得去年这周一的时间
public static Date getLastWeekFirst() {
Calendar cal = Calendar.getInstance();
int weeks = cal.get(Calendar.WEEK_OF_YEAR);
cal.add(Calendar.YEAR, -1);
cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
cal.set(Calendar.WEEK_OF_YEAR, weeks);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.MILLISECOND, 0);
return cal.getTime();
}
// 获得当天0点时间
public static Date getTimesmorning() {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.MILLISECOND, 0);
return cal.getTime();
}
// 获得去年0点时间
public static Date getLastYearTimesmorning() {
Calendar cal = Calendar.getInstance();
// 获取去年当天时间
cal.add(Calendar.YEAR, -1);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.MILLISECOND, 0);
return cal.getTime();
}
// 获得昨天0点时间
public static Date getYesterdaymorning() {
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(getTimesmorning().getTime() - 3600 * 24 * 1000);
return cal.getTime();
}
// 获得当天近7天时间
public static Date getWeekFromNow() {
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(getTimesmorning().getTime() - 3600 * 24 * 1000 * 7);
return cal.getTime();
}
// 获得当天24点时间
public static Date getTimesnight() {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, 24);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.MILLISECOND, 0);
return cal.getTime();
}
// 获得去年当天24点时间
public static Date getLastYearTimesnight() {
Calendar cal = Calendar.getInstance();
cal.add(Calendar.YEAR, -1);
cal.set(Calendar.HOUR_OF_DAY, 24);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.MILLISECOND, 0);
return cal.getTime();
}
// 获得本周一0点时间
public static Date getTimesWeekmorning() {
Calendar cal = Calendar.getInstance();
cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONDAY), cal.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
return cal.getTime();
}
// 获得上周一0点时间
public static Date getTimesLastWeekmorning() {
return DateUtils.addDays(getTimesWeekmorning(), -7);
}
// 获得上周今天24点时间
public static Date getLastWeekTodayNight() {
return DateUtils.addDays(getTimesnight(), -7);
}
// 获得本周日24点时间
public static Date getTimesWeeknight() {
Calendar cal = Calendar.getInstance();
cal.setTime(getTimesWeekmorning());
cal.add(Calendar.DAY_OF_WEEK, 7);
return cal.getTime();
}
// 获得去年本月第一天0点时间
public static Date getLastTimesMonthmorning() {
Calendar cal = Calendar.getInstance();
cal.add(Calendar.YEAR, -1);
cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONDAY), cal.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
cal.set(Calendar.DAY_OF_MONTH, cal.getActualMinimum(Calendar.DAY_OF_MONTH));
return cal.getTime();
}
// 获得本月第一天0点时间
public static Date getTimesMonthmorning() {
Calendar cal = Calendar.getInstance();
cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONDAY), cal.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
cal.set(Calendar.DAY_OF_MONTH, cal.getActualMinimum(Calendar.DAY_OF_MONTH));
return cal.getTime();
}
// 获得本月最后一天24点时间
public static Date getTimesMonthnight() {
Calendar cal = Calendar.getInstance();
cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONDAY), cal.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
cal.set(Calendar.HOUR_OF_DAY, 24);
return cal.getTime();
}
public static Date getLastMonthStartMorning() {
Calendar cal = Calendar.getInstance();
cal.setTime(getTimesMonthmorning());
cal.add(Calendar.MONTH, -1);
return cal.getTime();
}
public static Date getCurrentQuarterStartTime() {
Calendar c = Calendar.getInstance();
int currentMonth = c.get(Calendar.MONTH) + 1;
SimpleDateFormat longSdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
SimpleDateFormat shortSdf = new SimpleDateFormat("yyyy-MM-dd");
Date now = null;
try {
if (currentMonth >= 1 && currentMonth <= 3)
c.set(Calendar.MONTH, 0);
else if (currentMonth >= 4 && currentMonth <= 6)
c.set(Calendar.MONTH, 3);
else if (currentMonth >= 7 && currentMonth <= 9)
c.set(Calendar.MONTH, 4);
else if (currentMonth >= 10 && currentMonth <= 12)
c.set(Calendar.MONTH, 9);
c.set(Calendar.DATE, 1);
now = longSdf.parse(shortSdf.format(c.getTime()) + " 00:00:00");
} catch (Exception e) {
e.printStackTrace();
}
return now;
}
/**
* 当前季度的结束时间,即2012-03-31 23:59:59
*
* @return
*/
public static Date getCurrentQuarterEndTime() {
Calendar cal = Calendar.getInstance();
cal.setTime(getCurrentQuarterStartTime());
cal.add(Calendar.MONTH, 3);
return cal.getTime();
}
public static Date getCurrentYearStartTime() {
Calendar cal = Calendar.getInstance();
cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONDAY), cal.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
cal.set(Calendar.DAY_OF_MONTH, cal.getActualMinimum(Calendar.YEAR));
return cal.getTime();
}
public static Date getCurrentYearEndTime() {
Calendar cal = Calendar.getInstance();
cal.setTime(getCurrentYearStartTime());
cal.add(Calendar.YEAR, 1);
return cal.getTime();
}
public static Date getLastYearStartTime() {
Calendar cal = Calendar.getInstance();
cal.setTime(getCurrentYearStartTime());
cal.add(Calendar.YEAR, -1);
return cal.getTime();
}
}