日期的工具类

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’)

posted @ 2019-03-20 14:49  卡卡学习  阅读(304)  评论(0编辑  收藏  举报