- 首页 > it技术 > >
时间工具类TimeUtils
package com.example.test.util;
import java.text.SimpleDateFormat;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.Objects;
/**
* 日期时间工具类
*/
public class TimeUtils {/**
* 默认的日期格式化样式(yyyy-MM-dd)
*/
public static final String SIMPLE_DATE_PATTERN = "yyyy-MM-dd";
public static final DateTimeFormatter SIMPLE_DATE_FORMATER = DateTimeFormatter.ofPattern(SIMPLE_DATE_PATTERN);
/**
* 默认的时间格式化样式(HH:mm:ss)
*/
public static final String TIME_PATTERN = "HH:mm:ss";
public static final DateTimeFormatter TIME_FORMATTER = DateTimeFormatter.ofPattern(TIME_PATTERN);
/**
* 默认的时间格式化样式(yyyy-MM-dd HH:mm:ss)
*/
public static final String FULL_DATE_PATTERN = "yyyy-MM-dd HH:mm:ss";
/**
* LocalDate -> String(yyyy-MM-dd)
*
* @param date localDate
* @return 组装的时间
*/
public static String formatLocalDate(LocalDate date) {
return date.format(SIMPLE_DATE_FORMATER);
}/**
* LocalTime -> String(HH:mm:ss)
*
* @param time localtime
* @return 组装的时间
*/
public static String formatLocalDate(LocalTime time) {
return time.format(TIME_FORMATTER);
}/**
* LocalDateTime -> String(yyyy-MM-dd HH:mm:ss)
*
* @param localDateTime localDateTime
* @return 组装的时间
*/
public static String formatLocalDate(LocalDateTime localDateTime) {
return localDateTime.format(DateTimeFormatter.ofPattern(FULL_DATE_PATTERN));
}/**
* 获取当前日期和时间
*
* @return 返回样例:2020-04-12 19:30:29
*/
public static String getCurrentDateAndTime() {
return format(new Date());
}/**
* 将Date格式化成默认日期时间格式的字符串
*
* @param date 日期时间
* @return 返回样例:2020-04-12 19:30:29
*/
public static String format(Date date) {
SimpleDateFormat formatTool = new SimpleDateFormat();
formatTool.applyPattern(FULL_DATE_PATTERN);
return formatTool.format(date);
}/**
* 将Date格式化成默认日期格式的字符串
*
* @param date 日期时间
* @return 返回样例:2020-04-12
*/
public static String formatDate(Date date) {
SimpleDateFormat formatTool = new SimpleDateFormat();
formatTool.applyPattern(SIMPLE_DATE_PATTERN);
return formatTool.format(date);
}/**
* 将Date格式化成默认时间格式的字符串
*
* @param date 日期时间
* @return 返回样例:19:30:29
*/
public static String formatTime(Date date) {
SimpleDateFormat formatTool = new SimpleDateFormat();
formatTool.applyPattern(TIME_PATTERN);
return formatTool.format(date);
}/**
* 按照指定pattern格式格式化Date
*
* @param date日期时间
* @param pattern 样例:yyyy/MM/dd
* @return 返回样例:2020/04/12
*/
public static String format(Date date, String pattern) {
SimpleDateFormat formatTool = new SimpleDateFormat();
formatTool.applyPattern(pattern);
return formatTool.format(date);
}/**
* 计算LocalDateTime时间差
*
* @param fromTime 起始时间
* @param toTime结束时间
* @return 相差的毫秒值
*/
public static Long millsBetween(LocalDateTime fromTime, LocalDateTime toTime) {
Duration between = Duration.between(fromTime, toTime);
return between.toMillis();
}/**
* 毫秒值转换成时分秒毫秒
*
* @param mills 毫秒值
* @return 时分秒毫秒
*/
public static String millsFormat(Long mills) {
Integer ss = 1000;
Integer mi = ss * 60;
Integer hh = mi * 60;
Integer dd = hh * 24;
Long day = mills / dd;
Long hour = (mills - day * dd) / hh;
Long minute = (mills - day * dd - hour * hh) / mi;
Long second = (mills - day * dd - hour * hh - minute * mi) / ss;
Long milliSecond = mills - day * dd - hour * hh - minute * mi - second * ss;
StringBuffer sb = new StringBuffer();
if (day > 0) {
sb.append(day + "天");
}
if (hour > 0) {
sb.append(hour + "小时");
}
if (minute > 0) {
sb.append(minute + "分");
}
if (second > 0) {
sb.append(second + "秒");
}
if (milliSecond > 0) {
sb.append(milliSecond + "毫秒");
}
return sb.toString();
}/**
* 日期天数计算:包含头尾
*
* @param start 开始时间
* @param end结束时间
* @return 相差天数
*/
public static long dateCount(Date start, Date end) {
Objects.requireNonNull(start);
Objects.requireNonNull(end);
long days = (end.getTime() - start.getTime()) / (60 * 60 * 24 * 1000);
return days + 1;
}/**
* 日期天数计算:包含头尾
*
* @param start 开始时间
* @param end结束时间
* @return 相差天数
*/
public static long dateCount(LocalDate start, LocalDate end) {
Objects.requireNonNull(start);
Objects.requireNonNull(end);
Date startDate = Date.from(start.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant());
Date endDate = Date.from(end.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant());
return dateCount(startDate, endDate);
}/**
* 日期天数计算:不包含头尾
*
* @param start 开始时间
* @param end结束时间
* @return 相差天数
*/
public static long dateBetween(Date start, Date end) {
Objects.requireNonNull(start);
Objects.requireNonNull(end);
long days = (end.getTime() - start.getTime()) / (60 * 60 * 24 * 1000);
return days;
}/**
* 日期天数计算:不包含头尾
*
* @param start 开始时间
* @param end结束时间
* @return 相差天数
*/
public static long dateBetween(LocalDate start, LocalDate end) {
Objects.requireNonNull(start);
Objects.requireNonNull(end);
Date startDate = Date.from(start.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant());
Date endDate = Date.from(end.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant());
return dateBetween(startDate, endDate);
}/**
* 计算两个日期的天数差距(忽略时分秒)
*
* @param start 开始时间
* @param end结束时间
* @return 间隔天数,如果开始时间大于结束时间,返回值为负数
*/
public static int countDaysIn(Date start, Date end) {LocalDate ldStart = start.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
LocalDate ldend = end.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
return (int) (ldend.toEpochDay() - ldStart.toEpochDay());
}/**
* 比较两个Date是否是同一天
*
* @param date第一个时间
* @param anotherDate 第二个时间
* @return 是则返回true
*/
public static boolean isSameDay(Date date, Date anotherDate) {Objects.requireNonNull(date);
Objects.requireNonNull(anotherDate);
String dateStr = formatDate(date);
String anotherDateStr = formatDate(anotherDate);
return dateStr.equals(anotherDateStr);
}/**
* 比较两个Date的时间是否是同时
*
* @param date第一个时间
* @param anotherDate 第二个时间
* @return 是则返回true
*/
public static boolean isSameTime(Date date, Date anotherDate) {Objects.requireNonNull(date);
Objects.requireNonNull(anotherDate);
return formatTime(date).equals(formatTime(anotherDate));
}/**
* 计算两个日期的天数差距
*
* @param start 开始时间
* @param end结束时间
* @return 间隔天数,如果开始时间大于结束时间,返回值为负数
*/
public static Long count2Date(Date start, Date end) {
Long diff = (start.getTime() - end.getTime()) / 86400000;
return Math.abs(diff);
}/**
* 比较第一个时间是否晚于第二个时间
*
* @param date第一个时间
* @param anotherDate 第二个时间
* @return 是则返回true
*/
public static boolean isTimeAfter(Date date, Date anotherDate) {Objects.requireNonNull(date);
Objects.requireNonNull(anotherDate);
return formatTime(date).compareTo(formatTime(anotherDate)) > 0;
}/**
* 比较第一个日期是否晚于第二个日期
*
* @param date第一个日期
* @param anotherDate 第二个日期
* @return 是则返回true
*/
public static Boolean isDateAfter(Date date, Date anotherDate) {String dateStr = format(date, SIMPLE_DATE_PATTERN);
String anotherDateStr = format(anotherDate, SIMPLE_DATE_PATTERN);
return dateStr.compareTo(anotherDateStr) > 0;
}/**
* Date -> LocalDate
*
* @param date 日期
* @return localDate
*/
public static LocalDate transDate2LocalDate(Date date) {
return date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
}/**
* LocalDate -> Date
*
* @param localDate 日期
* @return date
*/
public static Date transLocalDate2Date(LocalDate localDate) {
return Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
}/**
* Date -> LocalDateTime
*
* @param date 日期
* @return localDateTime
*/
public static LocalDateTime transDate2LocalDateTime(Date date) {
return date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
}/**
* LocalDateTime -> Date
*
* @param localDateTime 日期
* @return date
*/
public static Date transLocalDateTime2Date(LocalDateTime localDateTime) {
return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
}/**
* Date -> LocalTime
*
* @param date 日期
* @return localTime
*/
public static LocalTime transDate2LocalTime(Date date) {
return LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault()).toLocalTime();
}}
推荐阅读