import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Assert;
import lombok.extern.slf4j.Slf4j;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.util.Calendar;
import java.util.Date;
@Slf4j
public class TimeUtil {
public static String format(Date date, String pattern) {
return new DateTime(date).toString(pattern);
}
/**
* 转换时间对象
*
* @param dateStr 时间字符串
* @param pattern: 时间格式
* @return: java.util.Date
*/
public static Date parse(String dateStr, String pattern) {
return DateUtil.parse(dateStr, pattern).toSqlDate();
}
/**
* 根据时间计算和今天相差时长(天数)
*
* @param targetDate 目标时间
* @return 返回相差时长字符串
*/
public static Long getDaysFromToday(Date targetDate) {
Assert.notNull(targetDate, "日期不能为空");
long dayCount = DateUtil.betweenDay(targetDate, new Date(), false);
//0天显示1天
if (dayCount == 0L) {
dayCount = 1L;
}
return dayCount;
}
/**
* 计算日期和今天相差月数
*
* @param targetDate 目标日期
* @return 相差时长
*/
public static Long getMonthsFromToday(Date targetDate) {
Assert.notNull(targetDate, "日期不能为空");
long totalMonthCount = DateUtil.betweenMonth(targetDate, new Date(), false);
long monthCount = totalMonthCount % 12;
if (monthCount > 0) {
return monthCount;
}
return 0L;
}
/**
* 获取当前时间之后的minute分钟时间
*
* @param minute minute分钟
* @return minute分钟之后的时间
*/
public static Date timeAfterMinute(Date date, int minute) {
SimpleDateFormat sdf = new SimpleDateFormat();
sdf.applyPattern(DateFormatConstant.C_YYYY_MM_DD_HH_MM_SS);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.MINUTE, minute);
return calendar.getTime();
}
/**
* 调整日期,并且设置为日期的0时0分0秒
*
* @param date
* @param offSet
* @return
*/
public static Date addDayAndSetFirstSecond(Date date, int offSet) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.DATE, offSet);
// 时
calendar.set(Calendar.HOUR_OF_DAY, 0);
// 分
calendar.set(Calendar.MINUTE, 0);
// 秒
calendar.set(Calendar.SECOND, 0);
// 毫秒
calendar.set(Calendar.MILLISECOND, 0);
return calendar.getTime();
}
public static Date parseDate(String d, String pattern) {
try {
return DateUtil.parse(d, pattern).toJdkDate();
} catch (Exception e) {
log.warn("时间解析异常:{}", e);
throw new CsrBizException("时间解析异常");
}
}
public static Date getCurrentDate(String pattern) {
DateTime now = new DateTime();
return parseDate(now.toString(pattern), pattern);
}
/**
* 获取指定日期所属季度的开始时间
*
* @param date 指定日期
* @return 季度开始时间
*/
public static Date beginOfQuarter(Date date) {
DateTime beginOfQuarter = DateUtil.beginOfQuarter(date);
return TimeUtil.parse(beginOfQuarter.toString(), DateFormatConstant.C_YYYY_MM_DD);
}
/**
* 获取指定日期所属季度的结束时间
*
* @param date 指定日期
* @return 季度结束时间
*/
public static Date endOfQuarter(Date date) {
DateTime endOfQuarter = DateUtil.endOfQuarter(date);
return TimeUtil.parse(endOfQuarter.toString(), DateFormatConstant.C_YYYY_MM_DD);
}
/**
* 获取默认日期
*
* @return 默认日期
*/
public static Date getInitDate() {
String beginTime = "1970-01-01";
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date initDate = new Date();
try {
initDate = format.parse(beginTime);
} catch (Exception e) {
e.printStackTrace();
}
return initDate;
}
/**
* 获取今天的日期
*
* @return 今天的日期
*/
public static Date getTodayDate() {
LocalDate today = LocalDate.now();
return TimeUtil.parse(today.toString(), DateFormatConstant.C_YYYY_MM_DD);
}
/**
* 获取明天的日期
*
* @return 明天的日期
*/
public static Date getTomorrowDate() {
LocalDate today = LocalDate.now().plusDays(1);
return TimeUtil.parse(today.toString(), DateFormatConstant.C_YYYY_MM_DD);
}
/**
* 获取指定日期的星期名称
*
* @param date 指定日期
* @return 星期名称
*/
public static String dayOfWeekEnum(Date date) {
String weekName = DateUtil.dayOfWeekEnum(date).toChinese();
return weekName;
}
/**
* 获取默认日期
*
* @return 默认日期
*/
public static Date getDefaultDate() {
String beginTime = "1900-01-01";
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date initDate = new Date();
try {
initDate = format.parse(beginTime);
} catch (Exception e) {
e.printStackTrace();
}
return initDate;
}
/**
* 比较2个日期时分秒的大小
*
* @param first
* @param second
* @return
*/
public static int compareHms(Date first, Date second) {
SimpleDateFormat format = new SimpleDateFormat(DateFormatConstant.HH_MM_SS);
return format.format(first).compareTo(format.format(second));
}
/**
* 判断两个日期相差的毫秒数
*
* @param beginDate 起始日期
* @param endDate 结束日期
* @return 日期差
* @since 3.0.1
*/
public static long betweenMs(Date beginDate, Date endDate) {
return DateUtil.betweenMs(beginDate, endDate);
}
/**
* 获取某天的结束时间
*
* @param date 日期
* @return {@link DateTime}
*/
public static DateTime endOfDay(Date date) {
return DateUtil.endOfDay(date);
}
}
06-29
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交