1.日期工具类
import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils;
import java.math.BigDecimal; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors;
@Slf4j public class DateUtil {
/** * 根据指定的日期,类型,增加或减少数量 * * @param date 日期 * @param calendarField 日历 * @param amount 数量 * @return date */ public static String add(Date date, int calendarField, int amount) { SimpleDateFormat dateFormat = new SimpleDateFormat(“yyyy-MM-dd”); if (date == null) { throw new IllegalArgumentException(“The date must not be null”); } Calendar c = Calendar.getInstance(); c.setTime(date); c.add(calendarField, amount); return dateFormat.format(c.getTime()); }
/** * 根据指定的日期,增加或者减少天数 * * @param date 日期 * @param amount 数量 * @return date */ public static String addDays(Date date, int amount) { return add(date, Calendar.DAY_OF_MONTH, amount); }
/** * 获取两个日期之间的天数 * * @param str_date1 开始日期 * @param str_date2 结束日期 * @return int * @throws ParseException 转换数据类型异常 */ public static int getDayLength(String str_date1, String str_date2) throws ParseException { //1 将日期字符串转成日期对象。 //定义日期格式对象。 SimpleDateFormat dateFormat = new SimpleDateFormat(“yyyy-MM-dd”);
Date date1 = dateFormat.parse(str_date1); Date date2 = dateFormat.parse(str_date2);
long time1 = date1.getTime(); long time2 = date2.getTime();
long time = Math.abs(time2 – time1);
int day = getDay(time); return day; }
private static int getDay(long time) { int day = (int) (time / 1000 / 60 / 60 / 24); return day; }
/** * 获取两个日期字符串之间的日期集合 * * @param startTime 开始时间 * @param endTime 结束时间 * @return list */ public static List<String> getBetweenDate(String startTime, String endTime) { SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd”); //声明保存日期的集合 ArrayList<String> list = new ArrayList<>(); try { //转化日期类型 Date startDate = sdf.parse(startTime); Date endDate = sdf.parse(endTime);
//用Calendar 进行日期比较判断 Calendar calendar = Calendar.getInstance(); while (startDate.getTime() <= endDate.getTime()) { //把日期添加到集合 list.add(sdf.format(startDate)); //设置日期 calendar.setTime(startDate); //把日期增加一天 calendar.add(Calendar.DATE, 1); //获取增加后的一天 startDate = calendar.getTime(); } } catch (ParseException e) { e.printStackTrace(); } return list; }
/** * 获取时间差 * * @param endDate 结束时间 * @param nowDate 起始时间 * @return */ public static String getDatePoor(Date endDate, Date nowDate) {
long nd = 1000 * 24 * 60 * 60; long nh = 1000 * 60 * 60; long nm = 1000 * 60; long ns = 1000;
// long ns = 1000; // 获得两个时间的毫秒时间差异 long diff = endDate.getTime() – nowDate.getTime();
// 计算差多少天 long day = diff / nd; if (day > 0) { return day + “天前”; }
// 计算差多少小时 long hour = diff % nd / nh; if (hour > 0) { return hour + “小时前”; }
// 计算差多少分钟 long min = diff % nd % nh / nm; if (min > 0) { return min + “分钟前”; }
// 计算差多少秒//输出结果 long sec = diff % nd % nh % nm / ns; if (sec > 0) { return sec + “秒前”; }
return “刚刚”;
}
/** * 获取定时表达式 * * @param taskTime 指定定时时间 * @return 定时表达式 */ public static String getCronEl(Date taskTime) { SimpleDateFormat simpleDateFormat = new SimpleDateFormat(“MM-dd HH:mm:ss”); String format = simpleDateFormat.format(taskTime); format = format.replace(” “, “-“); format = format.replaceAll(“:”, “-“); String[] split = format.split(“-“); CollectionUtils.reverseArray(split); List<String> strings = new ArrayList<>(); strings.addAll(Arrays.asList(split)); strings.add(5, “?”); String taskTimeEl = strings.stream().collect(Collectors.joining(” “)); return taskTimeEl; }
/** * 获取当前日期(格式:yyyy-MM-dd) * * @return 例:2019-03-15 */ public static String getCurrentDate() { Date currentDate = new Date(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat(“yyyy-MM-dd”); return simpleDateFormat.format(currentDate); }
/** * 获取当前日期戳 * * @return 例:20190315 */ public static String getCurrentDateStamp() { Date currentDate = new Date(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat(“yyyy-MM-dd”); String format = simpleDateFormat.format(currentDate); return format.replaceAll(“-“, “”); }
/** * 校验日期时间段不超过180天 * * @param beginDate 开始时间 * @param endDate 结束时间 * @throws ParseException 异常 */ public static void checkDayLength(String beginDate, String endDate) throws ParseException { //获取系统当前时间 Date date = new Date(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat(“yyyy-MM-dd”); simpleDateFormat.setTimeZone(TimeZone.getTimeZone(“Asia/Shanghai”)); String format = simpleDateFormat.format(date); date = simpleDateFormat.parse(format); Date parseStart = simpleDateFormat.parse(beginDate); log.info(“checkDayLength开始时间为parseStart{}”, parseStart); Date parseEnd = simpleDateFormat.parse(endDate); log.info(“checkDayLength结束时间为parseEnd:{}”, parseEnd); //所选日期不能是今天之后的日期 if (!parseStart.before(date) || !parseEnd.before(date)) { throw new ServiceException(StatisticalAnalysisEnum.DATE_FORMAT_IS_FALSE); } int dayLength = getDayLength(beginDate, endDate); if (dayLength > 179) { throw new ServiceException((StatisticalAnalysisEnum.DATE_MORE_EIGHTEEN)); } }
}
2.日期字段在返回时设置格式的注解为:
@JsonFormat(pattern = “yyyy-MM-dd HH:mm:ss” ,timezone = “GMT+8”)
3.日期标识
M –>月
d –> 月份的天数
D –> 年份的天数
H –> 24小时制
h –> 12小时制
4.日期比较大小
1)Date1.after(Date2)
当date1大于date2时,返回true,当date1小于等于date2时,返回false;
2)Date1.before(Date2)
当date1小于date2时,返回true,当date1大于等于date2时,返回false;
5.时间戳与日期转换
日期 —-> 时间戳 unix_timestamp(‘2019-03-12’)
时间戳 —-> 日期 from_unixtime(2321312321)
6.mysql中日期按指定格式展示
date_format(字段名,‘%Y-%m-%d’)
转载于:https://www.cnblogs.com/studyByzh/p/dateUtils.html
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/101040.html原文链接:https://javaforall.cn