一应代码皆有注释,不做赘述
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* @ClassName : DateUtil
* @Description : 时间工具类
* @Author : syf
* @Date: 2020-08-13 11:22
*/
public class DateUtil {
private Date date;
private String format;
/**
* 时间格式 [yyyy-MM-dd]
*/
public static final String DATE = "yyyy-MM-dd";
/**
* 时间格式 [yyyyMMdd]
*/
public static final String DATE_COMPACT = "yyyyMMdd";
/**
* 时间格式 [yyyy_MM_dd]
*/
public static final String DATE_UNDERLINE = "yyyy_MM_dd";
/**
* 时间格式 [HH:mm:ss]
*/
public static final String TIME = "HH:mm:ss";
/**
* 时间格式 [HHmmss]
*/
public static final String TIME_COMPACT = "HHmmss";
/**
* 时间格式 [HH_mm_ss]
*/
public static final String TIME_UNDERLINE = "HH_mm_ss";
/**
* 时间格式 [HH:mm:ss.SSS]
*/
public static final String TIME_MILLI = "HH:mm:ss.SSS";
/**
* 时间格式 [HHmmssSSS]
*/
public static final String TIME_MILLI_COMPACT = "HHmmssSSS";
/**
* 时间格式 [HH_mm_ss_SSS]
*/
public static final String TIME_MILLI_UNDERLINE = "HH_mm_ss_SSS";
/**
* 时间格式 [yyyy-MM-dd HH:mm:ss]
*/
public static final String DATE_TIME = "yyyy-MM-dd HH:mm:ss";
/**
* 时间格式 [yyyyMMddHHmmss]
*/
public static final String DATE_TIME_COMPACT = "yyyyMMddHHmmss";
/**
* 时间格式 [yyyy_MM_dd_HH_mm_ss]
*/
public static final String DATE_TIME_UNDERLINE = "yyyy_MM_dd_HH_mm_ss";
/**
* 时间格式 [yyyy-MM-dd HH:mm:ss.SSS]
*/
public static final String DATE_TIME_MILLI = "yyyy-MM-dd HH:mm:ss.SSS";
/**
* 时间格式 [yyyyMMddHHmmssSSS]
*/
public static final String DATE_TIME_MILLI_COMPACT = "yyyyMMddHHmmssSSS";
/**
* 时间格式 [yyyy_MM_dd_HH_mm_ss_SSS]
*/
public static final String DATE_TIME_MILLI_UNDERLINE = "yyyy_MM_dd_HH_mm_ss_SSS";
/**
* 时间格式 [yyyy]
*/
public static final String YER = "yyyy";
/**
* 时间格式 [MM]
*/
public static final String MONTH = "MM";
/**
* 时间格式 [dd]
*/
public static final String DAY = "dd";
/**
* 时间格式 [HH]
*/
public static final String HOUR = "HH";
/**
* 时间格式 [mm]
*/
public static final String MINUTE = "mm";
/**
* 时间格式 [ss]
*/
public static final String SECOND = "ss";
/**
* 时间格式 [SSS]
*/
public static final String MS = "SSS";
/**
* 创建一个当前时间的DateUtil
*/
public DateUtil() {
this.date = new Date();
this.format = DATE_TIME;
}
/**
* 传入指定时间创建DateUtil
*
* @param date
*/
public DateUtil(Date date) {
this.date = date;
this.format = DATE_TIME;
}
/**
* 传入指定时间字符串(格式为: yyyy-MM-dd HH:mm:ss),创建一个指定时间的DateUtil
*
* @param date
*/
public DateUtil(String date) {
SimpleDateFormat simple = new SimpleDateFormat(DATE_TIME);
try {
this.date = simple.parse(date);
this.format = DATE_TIME;
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 传入时间字符串及对应的时间格式字符串,创建一个指定时间的DateUtil
*
* @param date 时间字符串
* @param format 对应的时间格式字符串
*/
public DateUtil(String date, String format) {
SimpleDateFormat simple = new SimpleDateFormat(format);
try {
this.date = simple.parse(date);
this.format = format;
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 传入时间字符串及对应的时间格式字符串,创建一个指定时间的DateUtil
*
* @param date 时间字符串
* @param format 对应的时间格式字符串
*/
public DateUtil(Date date, String format) {
this.date = date;
this.format = format;
}
/**
* 获取创建的时间
*
* @return 时间类型
*/
public Date getDateTime() {
return this.date;
}
/**
* 获取指定时间格式的时间
*
* @param format 指定的时间格式
* @return
*/
public String getDateTime(String format) {
SimpleDateFormat simple = new SimpleDateFormat(format);
return simple.format(this.date);
}
/**
* 判断创建的DateUtil的时间是否大于当前时间
*
* @return (DateUtil.getDate () > new Date()) == true
*/
public boolean gt() {
if (this.date.after(new Date())) {
return true;
}
return false;
}
/**
* 判断创建的DateUtil的时间是否大于传入时间
*
* @param date 传入的时间
* @return (DateUtil.getDate () > date) == true
*/
public boolean gt(Date date) {
if (this.date.after(date)) {
return true;
}
return false;
}
/**
* 判断创建的DateUtil的时间是否大于传入时间
*
* @param date 传入的时间(字符串格式)
* @return (DateUtil.getDate () > date) == true
*/
public boolean gt(String date) {
SimpleDateFormat simple = new SimpleDateFormat(this.format);
Date date1 = null;
try {
date1 = simple.parse(date);
} catch (Exception e) {
return false;
}
if (this.date.after(date1)) {
return true;
}
return false;
}
/**
* 判断创建的DateUtil的时间是否小于当前时间
*
* @return (DateUtil.getDate () < new Date()) == true
*/
public boolean lt() {
if (this.date.before(new Date())) {
return true;
}
return false;
}
/**
* 判断创建的DateUtil的时间是否小于传入时间
*
* @param date 传入的时间
* @return (DateUtil.getDate () < date) == true
*/
public boolean lt(Date date) {
if (this.date.before(date)) {
return true;
}
return false;
}
/**
* 判断创建的DateUtil的时间是否小于传入时间
*
* @param date 传入的时间(字符串格式)
* @return (DateUtil.getDate () < date) == true
*/
public boolean lt(String date) {
SimpleDateFormat simple = new SimpleDateFormat(this.format);
Date date1 = null;
try {
date1 = simple.parse(date);
} catch (Exception e) {
return false;
}
if (this.date.before(date1)) {
return true;
}
return false;
}
/**
* 判断创建的DateUtil的时间是否大于当前时间
*
* @return (DateUtil.getDate () > new Date()) == true
*/
public boolean eq() {
if (this.date.after(new Date())) {
return false;
}
if (this.date.before(new Date())) {
return false;
}
return true;
}
/**
* 判断创建的DateUtil的时间是否大于传入时间
*
* @param date 传入的时间
* @return (DateUtil.getDate () > date) == true
*/
public boolean eq(Date date) {
if (this.date.after(date)) {
return false;
}
if (this.date.before(date)) {
return false;
}
return true;
}
/**
* 判断创建的DateUtil的时间是否大于传入时间
*
* @param date 传入的时间(字符串格式)
* @return (DateUtil.getDate () > date) == true
*/
public boolean eq(String date) {
SimpleDateFormat simple = new SimpleDateFormat(this.format);
Date date1 = null;
try {
date1 = simple.parse(date);
} catch (Exception e) {
return false;
}
if (this.date.after(date1)) {
return false;
}
if (this.date.before(date1)) {
return false;
}
return true;
}
/**
* 时间类型字符串转换成时间
*
* @param date 时间字符串(格式: yyyy-MM-dd HH:mm:ss)
* @return
*/
public static Date convertDate(String date) {
return new DateUtil(date).getDateTime();
}
/**
* 时间类型字符串转换成时间
*
* @param date 时间字符串
* @param format 时间格式
* @return
*/
public static Date convertDate(String date, String format) {
return new DateUtil(date, format).getDateTime();
}
/**
* 获取指定格式的指定时间
*
* @param date 时间
* @param format 指定的时间格式
* @return 与传入时间格式相符的时间字符串
*/
public static String getFormatDate(Date date, String format) {
return new DateUtil(date).getDateTime(format);
}
/**
* 获取当前时间 (格式: yyyy-MM-dd HH:mm:ss)
*
* @return
*/
public static String getFormatNow() {
return new DateUtil().getDateTime(DATE_TIME);
}
/**
* 获取指定格式的当前时间
*
* @param format 指定的时间格式
* @return
*/
public static String getFormatNow(String format) {
return new DateUtil().getDateTime(format);
}
/**
* 判断时间一是否大于时间二
*
* @param date1 时间一
* @param date2 时间二
* @return (date1 > date2) == true
*/
public static boolean gt(Date date1, String date2) {
return new DateUtil(date1).gt(date2);
}
/**
* 判断时间一是否大于时间二
*
* @param date1 时间一
* @param date2 时间二
* @return (date1 > date2) == true
*/
public static boolean gt(String date1, Date date2) {
return new DateUtil(date1).gt(date2);
}
/**
* 判断时间一是否大于时间二
*
* @param date1 时间一
* @param date2 时间二
* @return (date1 > date2) == true
*/
public static boolean gt(Date date1, Date date2) {
return new DateUtil(date1).gt(date2);
}
/**
* 判断时间一是否大于时间二
*
* @param date1 时间一
* @param date2 时间二
* @return (date1 > date2) == true
*/
public static boolean gt(String date1, String date2) {
return new DateUtil(date1).gt(date2);
}
/**
* 判断时间一是否小于时间二
*
* @param date1 时间一
* @param date2 时间二
* @return (date1 < date2) == true
*/
public static boolean lt(Date date1, String date2) {
return new DateUtil(date1).lt(date2);
}
/**
* 判断时间一是否小于时间二
*
* @param date1 时间一
* @param date2 时间二
* @return (date1 < date2) == true
*/
public static boolean lt(String date1, Date date2) {
return new DateUtil(date1).lt(date2);
}
/**
* 判断时间一是否小于时间二
*
* @param date1 时间一
* @param date2 时间二
* @return (date1 < date2) == true
*/
public static boolean lt(Date date1, Date date2) {
return new DateUtil(date1).lt(date2);
}
/**
* 判断时间一是否小于时间二
*
* @param date1 时间一
* @param date2 时间二
* @return (date1 < date2) == true
*/
public static boolean lt(String date1, String date2) {
return new DateUtil(date1).lt(date2);
}
/**
* 判断时间一是否等于时间二
*
* @param date1 时间一
* @param date2 时间二
* @return (date1 = = date2) == true
*/
public static boolean eq(Date date1, String date2) {
return new DateUtil(date1).eq(date2);
}
/**
* 判断时间一是否等于时间二
*
* @param date1 时间一
* @param date2 时间二
* @return (date1 = = date2) == true
*/
public static boolean eq(String date1, Date date2) {
return new DateUtil(date1).eq(date2);
}
/**
* 判断时间一是否等于时间二
*
* @param date1 时间一
* @param date2 时间二
* @return (date1 = = date2) == true
*/
public static boolean eq(Date date1, Date date2) {
return new DateUtil(date1).eq(date2);
}
/**
* 判断时间一是否等于时间二
*
* @param date1 时间一
* @param date2 时间二
* @return (date1 = = date2) == true
*/
public static boolean eq(String date1, String date2) {
return new DateUtil(date1).eq(date2);
}
/**
* 判断时间一是否大于时间二
*
* @param date1 时间一
* @param date2 时间二
* @param format 传入的时间的格式
* @return (date1 > date2) == true
*/
public static boolean gt(Date date1, String date2, String format) {
return new DateUtil(date1, format).gt(date2);
}
/**
* 判断时间一是否大于时间二
*
* @param date1 时间一
* @param date2 时间二
* @param format 传入的时间的格式
* @return (date1 > date2) == true
*/
public static boolean gt(String date1, Date date2, String format) {
return new DateUtil(date1, format).gt(date2);
}
/**
* 判断时间一是否大于时间二
*
* @param date1 时间一
* @param date2 时间二
* @param format 传入的时间的格式
* @return (date1 > date2) == true
*/
public static boolean gt(Date date1, Date date2, String format) {
return new DateUtil(date1, format).gt(date2);
}
/**
* 判断时间一是否大于时间二
*
* @param date1 时间一
* @param date2 时间二
* @param format 传入的时间的格式
* @return (date1 > date2) == true
*/
public static boolean gt(String date1, String date2, String format) {
return new DateUtil(date1, format).gt(date2);
}
/**
* 判断时间一是否小于时间二
*
* @param date1 时间一
* @param date2 时间二
* @param format 传入的时间的格式
* @return (date1 < date2) == true
*/
public static boolean lt(Date date1, String date2, String format) {
return new DateUtil(date1, format).lt(date2);
}
/**
* 判断时间一是否小于时间二
*
* @param date1 时间一
* @param date2 时间二
* @param format 传入的时间的格式
* @return (date1 < date2) == true
*/
public static boolean lt(String date1, Date date2, String format) {
return new DateUtil(date1, format).lt(date2);
}
/**
* 判断时间一是否小于时间二
*
* @param date1 时间一
* @param date2 时间二
* @param format 传入的时间的格式
* @return (date1 < date2) == true
*/
public static boolean lt(Date date1, Date date2, String format) {
return new DateUtil(date1, format).lt(date2);
}
/**
* 判断时间一是否小于时间二
*
* @param date1 时间一
* @param date2 时间二
* @param format 传入的时间的格式
* @return (date1 < date2) == true
*/
public static boolean lt(String date1, String date2, String format) {
return new DateUtil(date1, format).lt(date2);
}
/**
* 判断时间一是否等于时间二
*
* @param date1 时间一
* @param date2 时间二
* @param format 传入的时间的格式
* @return (date1 = = date2) == true
*/
public static boolean eq(Date date1, String date2, String format) {
return new DateUtil(date1, format).eq(date2);
}
/**
* 判断时间一是否等于时间二
*
* @param date1 时间一
* @param date2 时间二
* @param format 传入的时间的格式
* @return (date1 = = date2) == true
*/
public static boolean eq(String date1, Date date2, String format) {
return new DateUtil(date1, format).eq(date2);
}
/**
* 判断时间一是否等于时间二
*
* @param date1 时间一
* @param date2 时间二
* @param format 传入的时间的格式
* @return (date1 = = date2) == true
*/
public static boolean eq(Date date1, Date date2, String format) {
return new DateUtil(date1, format).eq(date2);
}
/**
* 判断时间一是否等于时间二
*
* @param date1 时间一
* @param date2 时间二
* @param format 传入的时间的格式
* @return (date1 = = date2) == true
*/
public static boolean eq(String date1, String date2, String format) {
return new DateUtil(date1, format).eq(date2);
}
/**
* 判断时间一是否大于时间二
*
* @param date1 时间一
* @param date2 时间二
* @param format 传入的时间的格式(中文格式,例: 年-月-日 时:分:秒)
* @return (date1 > date2) == true
*/
public static boolean gtByChinese(Date date1, String date2, String format) {
return new DateUtil(date1, getFormat(format)).gt(date2);
}
/**
* 判断时间一是否大于时间二
*
* @param date1 时间一
* @param date2 时间二
* @param format 传入的时间的格式(中文格式,例: 年-月-日 时:分:秒)
* @return (date1 > date2) == true
*/
public static boolean gtByChinese(String date1, Date date2, String format) {
return new DateUtil(date1, getFormat(format)).gt(date2);
}
/**
* 判断时间一是否大于时间二
*
* @param date1 时间一
* @param date2 时间二
* @param format 传入的时间的格式(中文格式,例: 年-月-日 时:分:秒)
* @return (date1 > date2) == true
*/
public static boolean gtByChinese(Date date1, Date date2, String format) {
return new DateUtil(date1, getFormat(format)).gt(date2);
}
/**
* 判断时间一是否大于时间二
*
* @param date1 时间一
* @param date2 时间二
* @param format 传入的时间的格式(中文格式,例: 年-月-日 时:分:秒)
* @return (date1 > date2) == true
*/
public static boolean gtByChinese(String date1, String date2, String format) {
return new DateUtil(date1, getFormat(format)).gt(date2);
}
/**
* 判断时间一是否小于时间二
*
* @param date1 时间一
* @param date2 时间二
* @param format 传入的时间的格式(中文格式,例: 年-月-日 时:分:秒)
* @return (date1 < date2) == true
*/
public static boolean ltByChinese(Date date1, String date2, String format) {
return new DateUtil(date1, getFormat(format)).lt(date2);
}
/**
* 判断时间一是否小于时间二
*
* @param date1 时间一
* @param date2 时间二
* @param format 传入的时间的格式(中文格式,例: 年-月-日 时:分:秒)
* @return (date1 < date2) == true
*/
public static boolean ltByChinese(String date1, Date date2, String format) {
return new DateUtil(date1, getFormat(format)).lt(date2);
}
/**
* 判断时间一是否小于时间二
*
* @param date1 时间一
* @param date2 时间二
* @param format 传入的时间的格式(中文格式,例: 年-月-日 时:分:秒)
* @return (date1 < date2) == true
*/
public static boolean ltByChinese(Date date1, Date date2, String format) {
return new DateUtil(date1, getFormat(format)).lt(date2);
}
/**
* 判断时间一是否小于时间二
*
* @param date1 时间一
* @param date2 时间二
* @param format 传入的时间的格式(中文格式,例: 年-月-日 时:分:秒)
* @return (date1 < date2) == true
*/
public static boolean ltByChinese(String date1, String date2, String format) {
return new DateUtil(date1, getFormat(format)).lt(date2);
}
/**
* 判断时间一是否等于时间二
*
* @param date1 时间一
* @param date2 时间二
* @param format 传入的时间的格式(中文格式,例: 年-月-日 时:分:秒)
* @return (date1 = = date2) == true
*/
public static boolean eqByChinese(Date date1, String date2, String format) {
return new DateUtil(date1, getFormat(format)).eq(date2);
}
/**
* 判断时间一是否等于时间二
*
* @param date1 时间一
* @param date2 时间二
* @param format 传入的时间的格式(中文格式,例: 年-月-日 时:分:秒)
* @return (date1 = = date2) == true
*/
public static boolean eqByChinese(String date1, Date date2, String format) {
return new DateUtil(date1, getFormat(format)).eq(date2);
}
/**
* 判断时间一是否等于时间二
*
* @param date1 时间一
* @param date2 时间二
* @param format 传入的时间的格式(中文格式,例: 年-月-日 时:分:秒)
* @return (date1 = = date2) == true
*/
public static boolean eqByChinese(Date date1, Date date2, String format) {
return new DateUtil(date1, getFormat(format)).eq(date2);
}
/**
* 判断时间一是否等于时间二
*
* @param date1 时间一
* @param date2 时间二
* @param format 传入的时间的格式(中文格式,例: 年-月-日 时:分:秒)
* @return (date1 = = date2) == true
*/
public static boolean eqByChinese(String date1, String date2, String format) {
return new DateUtil(date1, getFormat(format)).eq(date2);
}
/**
* 时间类型字符串转换成时间
*
* @param date 时间字符串
* @param format 时间格式(中文格式,例: 年-月-日 时:分:秒)
* @return
*/
public static Date convertDateByChinese(String date, String format) {
return new DateUtil(date, getFormat(format)).getDateTime();
}
/**
* 获取指定格式的指定时间
*
* @param date 时间
* @param format 指定的时间格式(中文格式,例: 年-月-日 时:分:秒)
* @return 与传入时间格式相符的时间字符串
*/
public static String getFormatDateByChinese(Date date, String format) {
return new DateUtil(date).getDateTime(getFormat(format));
}
/**
* 获取指定格式的当前时间
*
* @param format 指定的时间格式(中文格式,例: 年-月-日 时:分:秒)
* @return
*/
public static String getFormatNowByChinese(String format) {
return new DateUtil().getDateTime(getFormat(format));
}
/**
* 私有方法,对时间格式进行转换
*
* @param format
* @return
*/
private static String getFormat(String format) {
return format.replaceFirst("年", YER).replaceFirst("月", MONTH)
.replaceFirst("日", DAY).replaceFirst("时", HOUR)
.replaceFirst("分", MINUTE).replaceFirst("秒", SECOND)
.replaceFirst("毫秒", MS);
}
}
注:所有以ByChinese结尾的方法,传入的参数需使用汉字代替原有时间格式,例如:
原时间格式: “yyyy-MM-dd” 可以写成 “年-月-日”
原时间格式: “yyyy年MM月dd日” 可以写成 "年年月月日日"
主要用于忘记时间格式时,再去到处扒拉,麻烦