package com.moral.common.util; import com.moral.entity.charts.TimePeriod; import com.moral.entity.charts.TimeUnits; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; public class ReportTimeFormat { // 保持mysql format格式和java里format格式一致 public final static String YEAR_FORMAT = "yyyy"; public final static String MONTH_FORMAT = "yyyy-MM"; public final static String DAY_FORMAT = "yyyy-MM-dd"; public final static String HOUR_FORMAT = "yyyy-MM-dd/HH"; public final static String MINUTE_FORMAT = "yyyy-MM-dd/HH:mm"; public final static String YEAR_FORMAT_OF_MYSQL = "%Y"; public final static String MONTH_FORMAT_OF_MYSQL = "%Y-%m"; public final static String DAY_FORMAT_OF_MYSQL = "%Y-%m-%d"; public final static String HOUR_FORMAT_OF_MYSQL = "%Y-%m-%d/%H"; public final static String MINUTE_FORMAT_OF_MYSQL = "%Y-%m-%d/%H:%i"; public static String toMySqlTimeFormat(TimeUnits timeUnits){ switch (timeUnits){ case YEAR: return YEAR_FORMAT_OF_MYSQL; case MONTH: return MONTH_FORMAT_OF_MYSQL; case DAY: return DAY_FORMAT_OF_MYSQL; case HOUR: return HOUR_FORMAT_OF_MYSQL; case MINUTE:return MINUTE_FORMAT_OF_MYSQL; } return "%Y-%m-%d%H:%i:%s"; } public static String toMySqlActualTimeFormat(TimeUnits timeUnits){ switch (timeUnits){ case YEAR: return "%Y"; case MONTH: return "%m"; case DAY: return "%d"; case HOUR: return "%H"; case MINUTE:return "%i"; } return "%s"; } /** * 获取 时间区间数组 从小到大 * @param timePeriod * @return */ public static List makeTimeList(TimePeriod timePeriod){ Calendar start = Calendar.getInstance(); start.setTime(timePeriod.getStartTime()); Calendar end = Calendar.getInstance(); end.setTime(timePeriod.getEndTime()); List timeList = new ArrayList<>(); String formatStyle = ""; int timeUnit = 0; switch (timePeriod.getTimeUnits()){ case YEAR: formatStyle = YEAR_FORMAT; timeUnit = Calendar.YEAR;break; case MONTH: formatStyle =MONTH_FORMAT; timeUnit = Calendar.MONTH;break; case DAY: formatStyle =DAY_FORMAT; timeUnit = Calendar.DAY_OF_YEAR;break; case HOUR: formatStyle =HOUR_FORMAT; timeUnit = Calendar.HOUR;break; case MINUTE: formatStyle =MINUTE_FORMAT; timeUnit = Calendar.MINUTE;break; } do{ String time = dateToString(start.getTime(),formatStyle); timeList.add(time); start.add(timeUnit,1); } while (start.getTimeInMillis()<=end.getTimeInMillis()); return timeList; } /** * 时间计算方法 * @param date 待计算方法 * @param timeUnits 处理单位,年,月,日,时,分 * @param amount 差值,负数为减,正数为加 * @return */ public static Date dateCalc(Date date,TimeUnits timeUnits,Integer amount) { Calendar rightNow = Calendar.getInstance(); rightNow.setTime(date); rightNow.add(toCalendarTimeUnit(timeUnits), amount); return rightNow.getTime(); } /** * 获取格式化后的时间 * @param format * @return * @throws ParseException */ public static Date getFormatDate(String format){ Date date = null; try { SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format); String dateString = simpleDateFormat.format(new Date()); date = simpleDateFormat.parse(dateString); } catch (Exception ex) { ex.printStackTrace(); } return date; } /** * 设置时间 * @param date * @param timeUnits * @param value * @return */ public static Date dateSetValue(Date date,TimeUnits timeUnits,Integer value) { Calendar cal = Calendar.getInstance(); cal.setTime(date); cal.set(toCalendarTimeUnit(timeUnits), value); return cal.getTime(); } private static int toCalendarTimeUnit(TimeUnits timeUnits) { switch (timeUnits) { case YEAR: return Calendar.YEAR; case MONTH: return Calendar.MONTH; case DAY: return Calendar.DAY_OF_YEAR; case HOUR: return Calendar.HOUR; case MINUTE: return Calendar.MINUTE; case SECOND: return Calendar.SECOND; default: return Calendar.MILLISECOND; } } /**"yyyy-MM-dd hh:mm:ss" * 把指定的date类型时间转换为指定格式的字符串 * @param date * @return */ private static String dateToString(Date date,String formatStyle) { SimpleDateFormat format = new SimpleDateFormat(formatStyle); String dateFormat = format.format(date); return dateFormat; } }