package com.dingzhuo.energy.project.common; import cn.hutool.core.date.DateTime; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; /** * @Description: 时间工具类 * @author: yxw * @date: 2022年02月02日 12:23 */ public class DateTimeUtil { /** * 日期常用格式 */ public static final String COMMON_PATTERN = "yyyy-MM-dd HH:mm:ss"; /** * 日期常用格式 - 年份 */ public static final String COMMON_PATTERN_YEAR = "yyyy"; /** * 日期常用格式 - 月份 */ public static final String COMMON_PATTERN_MONTH = "yyyyMM"; /** * 日期常用格式 - 月份 */ public static final String COMMON_PATTERN_TO_MONTH = "yyyy-MM"; /** * 日期常用格式 - 天 */ public static final String COMMON_PATTERN_DAY = "yyyyMMdd"; /** * 日期常用格式 - 天 */ public static final String COMMON_PATTERN_TO_DAY = "yyyy-MM-dd"; /** * 日期常用格式 - 天某一天, */ public static final String COMMON_PATTERN_DAY_OF_MONTH = "dd"; /** * 日期常用格式 - 小时 */ public static final String COMMON_PATTERN_HOUR = "yyyyMMddHH"; /** * 日期常用格式 - 小时 */ public static final String COMMON_PATTERN_TO_HOUR = "yyyy-MM-dd HH"; /** * 获取当前时间,时间格式:yyyy-MM-dd HH:mm:ss * * @return */ public static String getNowDateTime() { return getNowDateTime(COMMON_PATTERN); } /** * 获取当前时间 * * @param pattern 时间格式 * @return */ public static String getNowDateTime(String pattern) { //设置日期格式 SimpleDateFormat df = new SimpleDateFormat(pattern); String dateTime = df.format(new Date()); return dateTime; } /** * 获取今年的年份值 * * @return */ public static String getNowYear() { return getNowDateTime(COMMON_PATTERN_YEAR); } /** * 获取今年的月份值 * * @return */ public static String getNowMonth() { return getNowDateTime(COMMON_PATTERN_MONTH); } /** * 字符串转成时间类型,默认格式:yyyy-MM-dd HH:mm:ss * * @param dateTimeStr * @return */ public static Date toDateTime(String dateTimeStr) { DateTime dt = null; try { dt = DateTime.of(dateTimeStr, COMMON_PATTERN); } catch (Exception e) { } return dt; } /** * 字符串转成时间类型 * * @param dateTimeStr * @return */ public static Date toDateTime(String dateTimeStr, String pattern) { DateTime dt = null; try { dt = DateTime.of(dateTimeStr, pattern); } catch (Exception e) { } return dt; } /** * 字符串转成特定格式的时间字符串类型 * * @param dateTimeStr 时间字符串 * @param sourcePattern 字符串时间格式 * @param toPattern 要转成什么格式的时间 * @return */ public static String toDateTimeStr(String dateTimeStr, String sourcePattern, String toPattern) { String str = CommonConst.EMPTY; try { DateTime dt = DateTime.of(dateTimeStr, sourcePattern); str = getDateTime(dt, toPattern); } catch (Exception e) { } return str; } /** * 时间转成指定格式的字符串 * * @param pattern 时间格式 * @return */ public static String getDateTime(Date dt, String pattern) { if (dt == null) { return CommonConst.EMPTY; } //设置日期格式 SimpleDateFormat df = new SimpleDateFormat(pattern); return df.format(dt); } /** * 根据字符串以及时间类型获取时间值 * * @param dateTime * @param timeType * @return */ public static String getDateTimeStrWithTimeType(Date dateTime, String timeType) { String str = CommonConst.EMPTY; switch (timeType) { case TimeTypeConst.TIME_TYPE_HOUR: str = getDateTime(dateTime, COMMON_PATTERN_TO_HOUR); break; case TimeTypeConst.TIME_TYPE_DAY: str = getDateTime(dateTime, COMMON_PATTERN_TO_DAY); break; case TimeTypeConst.TIME_TYPE_MONTH: str = getDateTime(dateTime, COMMON_PATTERN_TO_MONTH); break; case TimeTypeConst.TIME_TYPE_YEAR: str = getDateTime(dateTime, COMMON_PATTERN_YEAR); break; default: break; } return str; } /** * 根据字符串以及时间格式获取时间值 * * @param dateTimeStr * @param timeType * @return */ public static Date getDateTimeWithTimeType(String dateTimeStr, String timeType) { Date dt = null; switch (timeType) { case TimeTypeConst.TIME_TYPE_HOUR: dt = toDateTime(dateTimeStr, COMMON_PATTERN_TO_HOUR); break; case TimeTypeConst.TIME_TYPE_DAY: dt = toDateTime(dateTimeStr, COMMON_PATTERN_TO_DAY); break; case TimeTypeConst.TIME_TYPE_MONTH: dt = toDateTime(dateTimeStr, COMMON_PATTERN_TO_MONTH); break; case TimeTypeConst.TIME_TYPE_YEAR: dt = toDateTime(dateTimeStr, COMMON_PATTERN_YEAR); break; default: break; } return dt; } /** * 根据字符串以及时间格类型获取时间值 * * @param dateTime * @param timeType * @return */ public static Date getEndTimeWithTimeType(Date dateTime, String timeType) { Date dt = null; switch (timeType) { case TimeTypeConst.TIME_TYPE_HOUR: dt = addSeconds(addHours(dateTime, CommonConst.DIGIT_1), CommonConst.DIGIT_MINUS_1); break; case TimeTypeConst.TIME_TYPE_DAY: dt = addSeconds(addDays(dateTime, CommonConst.DIGIT_1), CommonConst.DIGIT_MINUS_1); break; case TimeTypeConst.TIME_TYPE_MONTH: dt = addSeconds(addMonths(dateTime, CommonConst.DIGIT_1), CommonConst.DIGIT_MINUS_1); break; case TimeTypeConst.TIME_TYPE_YEAR: dt = addSeconds(addYears(dateTime, CommonConst.DIGIT_1), CommonConst.DIGIT_MINUS_1); break; default: break; } return dt; } /** * 获取当前时间所属月份的最后一天 * * @return */ public static int getDateTimeLastDay(Date dt) { String month = getMonth(dt); String firstDate = month + "01"; Date nextMonthFirstDate = addMonths(toDateTime(firstDate, COMMON_PATTERN_DAY), CommonConst.DIGIT_1); Date currentMonthLastDate = addDays(nextMonthFirstDate, CommonConst.DIGIT_MINUS_1); int day = IntegerUtil.toInt(getDateTime(currentMonthLastDate, COMMON_PATTERN_DAY_OF_MONTH)); return day; } /** * 获取年份值 * * @return */ public static String getYear(Date dt) { return getDateTime(dt, COMMON_PATTERN_YEAR); } /** * 获取月份值 202202 * * @return */ public static String getMonth(Date dt) { return getDateTime(dt, COMMON_PATTERN_MONTH); } /** * 获取天 * * @return */ public static String getDay(Date dt) { return getDateTime(dt, COMMON_PATTERN_DAY); } /** * 获取小时 * * @return */ public static String getHour(Date dt) { return getDateTime(dt, COMMON_PATTERN_HOUR); } /** * 转成字符串类型值 * * @return */ public static String toString(Date dt) { if (dt == null) { return CommonConst.EMPTY; } return getDateTime(dt, COMMON_PATTERN); } /** * 时间增加对应的年数 * * @param dateTime * @param years * @return */ public static Date addYears(Date dateTime, int years) { return calcDate(dateTime, years, Calendar.YEAR); } /** * 时间增加对应的月数 * * @param dateTime * @param months * @return */ public static Date addMonths(Date dateTime, int months) { return calcDate(dateTime, months, Calendar.MONTH); } /** * 时间增加对应的天数 * * @param dateTime * @param days * @return */ public static Date addDays(Date dateTime, int days) { return calcDate(dateTime, days, Calendar.DATE); } /** * 时间增加对应的小时数 * * @param dateTime * @param hours * @return */ public static Date addHours(Date dateTime, int hours) { return calcDate(dateTime, hours, Calendar.HOUR); } /** * 时间增加对应的分钟数 * * @param dateTime * @param minutes * @return */ public static Date addMinutes(Date dateTime, int minutes) { return calcDate(dateTime, minutes, Calendar.MINUTE); } /** * 时间增加对应的秒数 * * @param dateTime * @param seconds * @return */ public static Date addSeconds(Date dateTime, int seconds) { return calcDate(dateTime, seconds, Calendar.SECOND); } /** * 计算日期通用方法 * * @param dateTime * @param value * @param calendarType 计算类型:Calendar.YEAR,Calendar.MONTH,Calendar.DAY * @return */ public static Date calcDate(Date dateTime, int value, int calendarType) { Date dt = null; try { if (dateTime == null) { return dt; } Calendar calendar = new GregorianCalendar(); calendar.setTime(dateTime); //把日期往后增加一年,整数往后推,负数往前移 calendar.add(calendarType, value); // 获取相加或者相减之后的时间值 Date tempDt = calendar.getTime(); // 把时间转成所需要的格式 String temp = getDateTime(tempDt, COMMON_PATTERN); dt = toDateTime(temp); } catch (Exception e) { } return dt; } }