package com.core.utils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
/**
* util型的日期数据和sql型的日期数据进行互换,并提供日期数据的格式化输出。
*
* @author
*/
@Slf4j
public class DateUtil {
public static final String FORMAT_DATE_TIME_MILLI = "yyyy-MM-dd HH:mm:ss.SSS";
public static final String FORMAT_DATE_TIME = "yyyy-MM-dd HH:mm:ss";
public static final String FORMAT_DATE_TIME_NO = "yyyyMMddHHmmss";
public static final String FORMAT_DATE = "yyyy-MM-dd";
public static final String FORMAT_DATE_NO = "yyyyMMdd";
public static final String FORMAT_DATA_NO_YY = "yyMMdd";
public static final String FORMAT_TIME_MILLI = "HH:mm:ss.SSS";
public static final String FORMAT_TIME = "HH:mm:ss";
public static final String FORMAT_TIME_NO_YY="MM/dd";
// Internal values for using in date/time calculations
public static final long MILLISECOND_OF_SECOND = 1000;
public static final long MILLISECOND_OF_MINUTE = MILLISECOND_OF_SECOND * 60;
public static final long MILLISECOND_OF_HOUR = MILLISECOND_OF_MINUTE * 60;
public static final long MILLISECOND_OF_DAY = MILLISECOND_OF_HOUR * 24;
public static final long MILLISECOND_OF_WEEK = MILLISECOND_OF_DAY * 7;
public static final long MILLISECOND_OF_YEAR = MILLISECOND_OF_DAY * 365;
public static final int MINUTE_OF_HALF_HOUR_ADD = 30;
public static final int MINUTE_OF_HALF_HOUR_DEDUCE = -30;
public DateUtil() {
}
public static String format(Date date, String format) {
try {
SimpleDateFormat sdf = new SimpleDateFormat(format);
return sdf.format(date);
} catch (Exception e) {
return null;
}
}
public static Date parse(String date, String format) {
try {
SimpleDateFormat sdf = new SimpleDateFormat(format);
return sdf.parse(date);
} catch (Exception e) {
return null;
}
}
/**
* 添加或减少周
*/
public static Date addWeek(Date date, int weeks) {
if (date != null) {
return new Date(date.getTime() + weeks * MILLISECOND_OF_WEEK);
}
return date;
}
/**
* 添加或减少天数
*/
public static Date addDay(Date date, int days) {
if (date != null) {
return new Date(date.getTime() + days * MILLISECOND_OF_DAY);
}
return date;
}
/**
* 添加或减少小时
*/
public static Date addHour(Date date, int hours) {
if (date != null) {
return new Date(date.getTime() + hours * MILLISECOND_OF_HOUR);
}
return date;
}
/**
* 添加或减少分钟
*/
public static Date addMinutes(Date date, int minutes) {
if (date != null) {
return new Date(date.getTime() + minutes * MILLISECOND_OF_MINUTE);
}
return date;
}
/**
* 添加或减少秒
*/
public static Date addSeconds(Date date, int seconds) {
if (date != null) {
return new Date(date.getTime() + seconds * MILLISECOND_OF_SECOND);
}
return date;
}
/**
* 获得某个月的第一天0时0分0秒的时间
*
* @param year
* @param month
* @return java.util.Date
*/
public static Date getFirstDateOfMonth(int year, int month) {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, year);
cal.set(Calendar.MONTH, month - 1);
cal.set(Calendar.DAY_OF_MONTH, 1);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
return cal.getTime();
}
/**
* 获取某一天的0时0分0秒的时间
*
* @param year
* @param month
* @param day
* @return
*/
public static Date getFirstTimeOfDay(int year, int month, int day) {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, year);
cal.set(Calendar.MONTH, month - 1);
cal.set(Calendar.DAY_OF_MONTH, day);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
return cal.getTime();
}
/**
* 获取某一天的0时0分0秒的时间
*
* @param date
* @return
*/
public static Date getFirstTimeOfDay(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
return cal.getTime();
}
/**
* 获取某一天的23时59分59秒的时间
*
* @param date
* @return
*/
public static Date getLastTimeOfDay(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.set(Calendar.HOUR_OF_DAY, 23);
cal.set(Calendar.MINUTE, 59);
cal.set(Calendar.SECOND, 59);
return cal.getTime();
}
/**
* 获取某一天指定的时间
*
* @param date
* @return
*/
public static Date getDateFromCustomTime(Date date, int hour, int minute, int second) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.set(Calendar.HOUR_OF_DAY, hour);
cal.set(Calendar.MINUTE, minute);
cal.set(Calendar.SECOND, second);
return cal.getTime();
}
/**
* 获得Date型对象,根据时间点
*
* @param year
* @param month
* @param day
* @return
*/
public static Date getDateFromTime(int year, int month, int day, int hour, int minute, int second) {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, year);
cal.set(Calendar.MONTH, month - 1);
cal.set(Calendar.DAY_OF_MONTH, day);
cal.set(Calendar.HOUR_OF_DAY, hour);
cal.set(Calendar.MINUTE, minute);
cal.set(Calendar.SECOND, second);
return cal.getTime();
}
/**
* 将util型的日期型的数据转换为sql型的日期数据
*
* @param date java.util.Date
* @return java.sql.Date
*/
public static java.sql.Date utilToSql(Date date) {
return new java.sql.Date(date.getTime());
}
/**
* 将sql型的日期型的数据转换为util型的日期数据
*
* @param sqlDate
* @return java.util.Date
*/
public static Date sqlToUtil(java.sql.Date sqlDate) {
return new Date(sqlDate.getTime());
}
/**
* 将时间字符串进行相加操作后格式化输出
*
* @param timeStr 格式<HH:mm>
* @param hour
* @param minute
* @param second
* @return 格式<HH:mm>
*/
public static String timeOperate(String timeStr, int hour, int minute, int second) {
SimpleDateFormat df = new SimpleDateFormat("HH:mm");
String[] times = timeStr.trim().split(":");
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, Integer.valueOf(times[0]));
calendar.set(Calendar.MINUTE, Integer.valueOf(times[1]));
calendar.add(Calendar.HOUR_OF_DAY, hour);
calendar.add(Calendar.MINUTE, minute);
calendar.add(Calendar.SECOND, second);
return df.format(calendar.getTime());
}
/**
* 根据指定string生成当天时间
*
* @param timeStr 格式<HH:mm>
* @return 秒和毫秒时间为0
*/
public static Date getCurrentDayTimeByStr(String timeStr) {
String[] times = timeStr.trim().split(":");
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, Integer.valueOf(times[0]));
calendar.set(Calendar.MINUTE, Integer.valueOf(times[1]));
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
return calendar.getTime();
}
/**
* 两个日期是否是同一天
*
* @param firstDate
* @param secondDate
* @return
*/
public static boolean inTheSameDay(Date firstDate, Date secondDate) {
Calendar first = Calendar.getInstance();
first.setTime(firstDate);
Calendar second = Calendar.getInstance();
second.setTime(secondDate);
int year1 = first.get(Calendar.YEAR);
int month1 = first.get(Calendar.MONTH);
int day1 = first.get(Calendar.DAY_OF_MONTH);
int year2 = second.get(Calendar.YEAR);
int month2 = second.get(Calendar.MONTH);
int day2 = second.get(Calendar.DAY_OF_MONTH);
if (year1 == year2 && month1 == month2 && day1 == day2) {
return true;
}
return false;
}
/**
* 获取当前时间所在年的周数
*
* @param date
* @return
* @author lishengtao
* @date 2017-07-19
*/
public static int getWeekOfYear(Date date) {
Calendar c = Calendar.getInstance();
c.setFirstDayOfWeek(Calendar.MONDAY);
c.setMinimalDaysInFirstWeek(4);
c.setTime(date);
return c.get(Calendar.WEEK_OF_YEAR);
}
/**
* 获取指定时间所在周的开始日期
*
* @param date
* @return
* @author lishengtao
* @date 2017-07-19
*/
public static Date getFirstDayOfWeek(Date date) {
Calendar c = Calendar.getInstance();
c.setFirstDayOfWeek(Calendar.MONDAY);
c.setTime(date);
c.set(Calendar.HOUR_OF_DAY, 0);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek()); // Monday
return c.getTime();
}
/**
* 获取某年的第几周的开始日期
*
* @param year
* @param week
* @return
* @author lishengtao
* @date 2017-07-19
*/
public static Date getFirstDayOfWeek(int year, int week) {
Calendar c = Calendar.getInstance();
c.setTime(new Date());
c.set(Calendar.YEAR, year);
c.set(Calendar.HOUR_OF_DAY, 0);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
Date theDate = c.getTime();
int weekNum = getWeekOfYear(theDate);
return getFirstDayOfWeek(DateUtil.addWeek(c.getTime(), week - weekNum));
}
/**
* 获取某年的第几周的结束日期
*
* @param year
* @param week
* @return
* @author lishengtao
* @date 2017-07-19
*/
public static Date getLastDayOfWeek(int year, int week) {
return DateUtil.addDay(getFirstDayOfWeek(year, week), 6);
}
/**
* 获取两个日期间隔的天数
*
* @param early
* @param late
* @return
* @author lishengtao
* @date 2017-07-24
*/
public static final int daysBetween(Date early, Date late) {
Calendar calst = Calendar.getInstance();
Calendar caled = Calendar.getInstance();
calst.setTime(early);
caled.setTime(late);
//设置时间为0时
calst.set(Calendar.HOUR_OF_DAY, 0);
calst.set(Calendar.MINUTE, 0);
calst.set(Calendar.SECOND, 0);
caled.set(Calendar.HOUR_OF_DAY, 0);
caled.set(Calendar.MINUTE, 0);
caled.set(Calendar.SECOND, 0);
//得到两个日期相差的天数
int days = ((int) (caled.getTime().getTime() / 1000) - (int) (calst
.getTime().getTime() / 1000)) / 3600 / 24;
return days;
}
/**
* 查询耗时时间:单位秒
*
* @param start Long
* @param end Long
* @return
* @author zhangwentao
* @date 2018-1-30
*/
public static Long getElapsedTime(Long start, Long end) {
return (end - start) / 1000;
}
/**
* 比较两个日期的大小
*
* @param DATE1
* @param DATE2
* @return
*/
public static Integer compareDate(String DATE1, String DATE2) {
DateFormat df = new SimpleDateFormat(FORMAT_DATE_TIME);
try {
if (StringUtils.isNotEmpty(DATE1) && StringUtils.isNotEmpty(DATE2)) {
Date dt1 = df.parse(DATE1);
Date dt2 = df.parse(DATE2);
if (dt1.getTime() > dt2.getTime()) {
return 1;
} else if (dt1.getTime() < dt2.getTime()) {
return -1;
} else {
return 0;
}
}
} catch (ParseException e) {
log.error("compareDate error", e);
}
return 0;
}
/**
* 比较两个日期的大小
*
* @param dt1
* @param dt2
* @return
*/
public static Integer compareDate(Date dt1, Date dt2) {
if (dt1 != null && dt2 != null) {
if (dt1.getTime() > dt2.getTime()) {
return 1;
} else if (dt1.getTime() < dt2.getTime()) {
return -1;
} else {
return 0;
}
}
return 0;
}
/**
* 查询开始时间和结束时间的相差分钟数
*
* @param startTime
* @param endTime
* @return
*/
public static Long getDurationMin(Date startTime, Date endTime) {
long duration = endTime.getTime() - startTime.getTime();
Double durationMin = (double) duration / (1000 * 60);
return Math.round(durationMin);
}
/**
* 查询开始时间和结束时间的相差秒数
*
* @param startTime
* @param endTime
* @return
*/
public static Long getDurationSecond(Date startTime, Date endTime) {
long duration = endTime.getTime() - startTime.getTime();
Double durationSecond = (double) duration / 1000;
return Math.round(durationSecond);
}
public static String getGapTime(Long time) {
if(time == null){
return "";
}
long hours = time / (60 * 60) ;
long minutes = ((time / 60) - (hours * 60 ));
return hours + "小时" + minutes+"分";
}
public static void main(String[] args) {
System.out.println(getGapTime(662522123L));
}
/**
* 获取当前精确到秒的时间戳
* @return
*/
public static int getCurSecondTimestamp(){
String timestamp = String.valueOf(new Date().getTime()/1000);
return Integer.valueOf(timestamp);
}
}
计算时间工具类
于 2021-12-10 15:49:49 首次发布