最近业务关于图标统计展示稍多一点,根据时间查询的地方就显得很重要,下面把自己整理的日期处理的DateUtils分析出来,希望可以有用,不用做重复造轮子的事。
package me.zhengjie.roma.statistics.domain;
import java.text.ParseException;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import org.apache.commons.lang3.StringUtils;
public class DateUtils {
public static String formatOne = "yyyy-MM-dd";
public static String formatSeven = "yyyy-MM";
public static String formatTwo = "yyyy-MM-dd HH:mm:ss";
public static String formatThree = "MM-dd";
public static String formatFour = "yyyy-MM-dd HH:mm";
public static String formatFive = "yyyy";
public static String formatSix = "dd";
/**
*
* 2020年8月28日
* kangleia
* TODO 根据传入日期获取对应类型日期
* @param date 日期
* @param type 目标日期类型:yesterday(昨天)、lastDay(上周同天)、lastMonth(上月同天)、lastThreeMonth(三个前月同天)、year(上年同天)、lastThirtyDay(过去30天)
* @param format
* @return
* String
*/
public static String getTime(Date date, String type, String format) {
SimpleDateFormat formatMg = new SimpleDateFormat(DateUtils.formatOne);
String time = formatMg.format(new Date());
if (StringUtils.isNoneBlank(format)) {
formatMg = new SimpleDateFormat(format);
}
Calendar c = Calendar.getInstance();
c.setTime(date);
switch (type) {
case "yesterday":// 昨天
c.add(Calendar.DATE, -1);
break;
case "lastDay":// 过去七天
c.add(Calendar.DATE, -7);
break;
case "lastThirtyDay":// 过去30天
c.add(Calendar.DAY_OF_YEAR, -30);
break;
case "lastMonth":// 过去一个月
c.add(Calendar.MONTH, -1);
break;
case "lastThreeMonth": // 过去三个月
c.add(Calendar.MONTH, -3);
break;
case "year": // 过去一年
c.add(Calendar.YEAR, -1);
break;
default:// 默认当天
c.setTime(new Date());
break;
}
time = formatMg.format(c.getTime());
return time;
}
/**
*
* 2020年8月28日
* kangleia
* TODO 根据日期获取统计X轴时间数据,当前日期往前推count天之间所有日期
* @param date 日期
* @param count
* @return
* List<String>
*/
public static List<String> getX(Date date, int count) {