时间工具类
JAVA代码中 通常使用时间时 需要各种格式化,解决问题作者收录了一下方法
1.定义时间格式
/**定义常见格式*/
private static String FORMAT_DATE_TIME = "yyyy-MM-dd HH:mm:ss";
private static String FORMAT_DATE = "yyyy-MM-dd";
private static String FORMAT_TIME = "HH:mm:ss";
private static String FORMAT_UTC_DATE_TIME = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'";
2.date,localdate,localdatetime,localtime,String的相互转换
/**
* LocalDate转Date
*
* @param localDate
* @return
*/
public static Date localDate2Date(LocalDate localDate) {
if (null == localDate) {
return null;
}
ZonedDateTime zonedDateTime = localDate.atStartOfDay(ZoneId.systemDefault());
return Date.from(zonedDateTime.toInstant());
}
/**
* Date转LocalTime
*
* @param date
*/
public static LocalTime date2LocalTime(Date date) {
if (null == date) {
return null;
}
return date.toInstant().atZone(ZoneId.systemDefault()).toLocalTime();
}
/**
* Date转LocalDate
*
* @param date
*/
public static LocalDate date2LocalDate(Date date) {
if (null == date) {
return null;
}
return date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
}
/**
* UTCString date转Date
*
* @param dateString
* @return
*/
public static Date UTCString2Date(String dateString) throws ParseException {
SimpleDateFormat df2 = new SimpleDateFormat(FORMAT_UTC_DATE_TIME);
df2.setTimeZone(TimeZone.getTimeZone("UTC"));
return df2.parse(dateString);
}
/**
* String 转date
*
* @param strDate
* @return
*/
public static Date string2Date(String strDate) {
return getDateByString(strDate, FORMAT_DATE_TIME);
}
/**
* String 转date(带格式)
*
* @param strDate
* @return
*/
public static Date string2Date(String strDate, String pattern) {
return getDateByString(strDate, pattern);
}
/**
* date转String
*
* @param date
* @return
*/
public static String date2String(Date date) {
return getStringByDate(date, FORMAT_DATE_TIME);
}
/**
* date转String(带格式)
*
* @param date
* @return
*/
public static String date2String(Date date, String pattern) {
return getStringByDate(date, pattern);
}
private static Date getDateByString(String strDate, String pattern) {
if (strDate == null) {
return null;
}
SimpleDateFormat formatter = new SimpleDateFormat(pattern);
Date utilDate = null;
try {
utilDate = formatter.parse(strDate);
} catch (ParseException e) {
e.printStackTrace();
}
if (utilDate == null) {
return null;
}
return new Date(utilDate.getTime());
}
private static String getStringByDate(Date date, String pattern) {
if (null == date) {
return null;
}
return new SimpleDateFormat(pattern).format(date);
}
3.常用工具类代码(包含)
判断date在startTime和endTime区间
/**
* 判断date在startTime和endTime区间
* 只判断时分秒
*
* @param date 时间
* @param startTime 开始时间
* @param endTime 结束时间
* @return
*/
public static Boolean betweenTimeRange(Date date, Date startTime, Date endTime) {
if (date == null) {
date = new Date();
}
if (startTime == null || endTime == null) {
return false;
}
LocalTime localTime = date2LocalTime(date);
LocalTime localStartTime = date2LocalTime(startTime);
LocalTime localEndTime = date2LocalTime(endTime);
return localTime.isAfter(localStartTime) && localTime.isBefore(localEndTime);
}
判断现在日期和目标日期相差时长(单位可以定义)
/**
* 判断现在日期和目标日期相差时长
* (支持yyyy-MM-dd HH:mm:ss)
*
* @param aDate 日期A
* @param bDate 日期A
* @param timeUnit 差单位(null就是毫秒值)
* @return 时间差
*/
public static Long getABSDateTimeRange(Date aDate, Date bDate, TimeUnit timeUnit) {
if (null == aDate || null == bDate) {
return null;
}
// 取得毫秒差
long diff = Math.abs(aDate.getTime() - bDate.getTime());
switch (timeUnit) {
case NANOSECONDS:// 纳秒
return TimeUnit.MILLISECONDS.toNanos(diff);
case MICROSECONDS:// 微秒
return TimeUnit.MILLISECONDS.toMicros(diff);
case MILLISECONDS:// 毫秒
return TimeUnit.MILLISECONDS.toMillis(diff);
case SECONDS:// 秒
return TimeUnit.MILLISECONDS.toSeconds(diff);
case MINUTES:// 分钟
return TimeUnit.MILLISECONDS.toMinutes(diff);
case HOURS:// 小时
return TimeUnit.MILLISECONDS.toHours(diff);
case DAYS:// 天数
return TimeUnit.MILLISECONDS.toDays(diff);
default:
return null;
}
}
判断现在日期和目标日期相差天数或秒数(细化方法)
/**
* 判断现在日期和目标日期相差天数
* (支持yyyy-MM-dd)
*
* @param targetDate 目标日期
* @return
*/
public static Long getABSDateRange(Date targetDate) {
if (null == targetDate) {
return null;
}
return Math.abs(date2LocalDate(targetDate).toEpochDay() - LocalDate.now().toEpochDay());
}
/**
* 判断现在时间和目标时间相差秒数
* (支持yyyy-MM-dd HH:mm:ss)
*
* @param targetTime 目标时间
* @return
*/
public static Integer getABSTimeRange(String targetTime) {
if (StringUtils.isBlank(targetTime)) {
return null;
}
LocalTime targetDateTime = LocalTime.parse(targetTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
return Math.abs(targetDateTime.toSecondOfDay() - LocalTime.now().toSecondOfDay());
}
SQL常用的(date月第一天,最后一天,当天00:00:00或23:59:59")
/**
* 获取传入时间的当前月第一天
*
* @param now 时间
* @return 传入时间的当前月第一天
*/
public static Date getFirstDayByCurrentMonth(Date now) {
if (now == null) {
return null;
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(now);
calendar.set(Calendar.DAY_OF_MONTH, 1);
calendar.add(Calendar.MONTH, 0);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
return calendar.getTime();
}
/**
* 获取传入时间的当前月最后一天
*
* @param now 时间
* @return 传入时间的当前月最后一天
*/
public static Date getLastDayByCurrentMonth(Date now) {
if (now == null) {
return null;
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(now);
calendar.set(Calendar.DAY_OF_MONTH, 0);
calendar.add(Calendar.MONTH, 1);
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
return calendar.getTime();
}
/**
* 获取传入时间的当天00:00:00
*
* @param now 时间
* @return 传入时间的当天00:00:00
*/
public static Date getFirstTimeByDay(Date now) {
if (now == null) {
return null;
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(now);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
return calendar.getTime();
}
/**
* 获取传入时间的当天23:59:59
*
* @param now 时间
* @return 获取传入时间的当天23:59:59
*/
public static Date getLastTimeByDay(Date now) {
if (now == null) {
return null;
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(now);
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
return calendar.getTime();
}
时间时分秒处理
/**
* 获取参数时间修改后的时间
*
* @param sourceDate 时间
* @param var 修改量级(后为正数,前为负数)
* @param calendarUnit 时间单位(默认天)
* 注意Calendar.HOUR_OF_DAY是24小时制,Calendar.HOUR是12小时制
* 修改天数需要使用Calendar.DATE|Calendar.DAY_OF_MONTH和DAY_OF_YEAR也可行,未测试
* @return targetDate 参数时间修改后的时间
*/
public static Date getTargetDate(Date sourceDate, Integer var, Integer calendarUnit) {
if (sourceDate == null) {
return null;
}
if (var == null || var == 0) {
return sourceDate;
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(sourceDate);
calendar.add(calendarUnit, var);
return calendar.getTime();
}
/**
* 获取参数时间天数后的时间
*
* @param now 时间
* @param days 天数
* @return 参数时间天数后的时间
*/
public static Date getXAfterDay(Date now, Integer days) {
if (days == null) {
return null;
}
if (now == null) {
return null;
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(now);
calendar.add(Calendar.DATE, days);
return calendar.getTime();
}
该博客分享了一组Java时间工具类,包括时间格式定义、Date、LocalDate、LocalDateTime、LocalTime及String之间的转换方法,还提供了判断时间区间、计算时间差、获取SQL常用时间表达式等功能。这些实用工具类简化了日期和时间的操作。

416

被折叠的 条评论
为什么被折叠?



