前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >日期的工具类

日期的工具类

作者头像
全栈程序员站长
发布2021-07-07 17:58:57
发布2021-07-07 17:58:57
6900
举报

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档