public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
public static final String TIME_FORMAT = "HH:mm:ss";
public static final String DATE_FORMAT = "yyyy-MM-dd";
public static final String DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
/**
* 获取今天的日期,今天的0时0分0秒
*
* @return
*/
public static Date getTodayDate() {
return toDayStart(getCalendar(null)).getTime();
}
/**
* 将日历设置到当天的开始 0时0分0秒0毫秒
*
* @param cal
* @return
*/
public static Calendar toDayStart(Calendar cal) {
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
return cal;
}
/**
* 根据date 获取日历对象
*
* @param date 为null 时认为是当前时间
* @return
*/
public static Calendar getCalendar(Date date) {
Calendar cal = Calendar.getInstance();
if (date != null)
cal.setTime(date);
return cal;
}
/**
* 转化日期或者时间
*
* @param date
* @return
*/
public static Date parseDate(String date) {
try {
String[] parsePatterns = {DATE_TIME_FORMAT, DATE_FORMAT};
return parseDate(date, parsePatterns);
} catch (ParseException e) {
System.out.println("转化日期错误");
}
return null;
}
/**
* 获取本月第一天0时0分0秒
*
* @return
*/
public static Date getFirstDay() {
Calendar c = Calendar.getInstance();
c.add(Calendar.MONTH, 0);
// 设置为1号,当前日期既为本月第一天
c.set(Calendar.DAY_OF_MONTH, 1);
Date date = toDayStart(c.getTime());
return date;
}
/**
* 获取指定日期当天的开始 0时0分0秒0毫秒
*
* @param date
* @return
*/
public static Date toDayStart(Date date) {
return toDayStart(getCalendar(date)).getTime();
}
/**
* 获取指定date所在月份的第一天,默认是0点0份0秒0毫秒
*/
public static Date getFirstDayOfMonth(Date srcDate) {
Calendar cal = Calendar.getInstance();
cal.setTime(srcDate);
cal.set(Calendar.DATE, 1);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
return cal.getTime();
}
/**
* 获取指定date所在月份的最后一天,默认是0点0份0秒0毫秒
*/
public static Date getLastDayOfMonth(Date srcDate) {
Calendar cal = Calendar.getInstance();
cal.setTime(srcDate);
cal.set(Calendar.DATE, cal.getActualMaximum(Calendar.DATE));
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
return cal.getTime();
}
/**
* 获取指定date所在月份的最后一天,默认是23点59份59秒999毫秒
*
* @author huang_yanzhen
*/
public static Date getMaxLastDayOfMonth(Date srcDate) {
Calendar cal = Calendar.getInstance();
cal.setTime(srcDate);
cal.set(Calendar.DATE, cal.getActualMaximum(Calendar.DATE));
cal.set(Calendar.HOUR_OF_DAY, 23);
cal.set(Calendar.MINUTE, 59);
cal.set(Calendar.SECOND, 59);
cal.set(Calendar.MILLISECOND, 999);
return cal.getTime();
}
/**
* 获取两个日期相差的月数
*
* @param d1 较大的日期
* @param d2 较小的日期
* @return 如果d1>d2返回 月数差 否则返回0
*/
public static int getMonthBetweenTwoDay(Date d1, Date d2) {
Calendar c1 = Calendar.getInstance();
Calendar c2 = Calendar.getInstance();
c1.setTime(d1);
c2.setTime(d2);
if (c1.getTimeInMillis() < c2.getTimeInMillis())
return 0;
int year1 = c1.get(Calendar.YEAR);
int year2 = c2.get(Calendar.YEAR);
int month1 = c1.get(Calendar.MONTH);
int month2 = c2.get(Calendar.MONTH);
int day1 = c1.get(Calendar.DAY_OF_MONTH);
int day2 = c2.get(Calendar.DAY_OF_MONTH);
// 获取年的差值 假设 d1 = 2015-8-16 d2 = 2011-9-30
int yearInterval = year1 - year2;
// 如果 d1的 月-日 小于 d2的 月-日 那么 yearInterval-- 这样就得到了相差的年数
if (month1 < month2 || month1 == month2 && day1 < day2)
yearInterval--;
// 获取月数差值
int monthInterval = (month1 + 12) - month2;
if (day1 < day2)
monthInterval--;
monthInterval %= 12;
return yearInterval * 12 + monthInterval;
}
/**
* 判断日期是否是周末
*
* @param date 日期
* @return true 是周末 false 非周末
*/
public static Boolean isWeekendDate(Date date) {
Calendar cal = Calendar.getInstance();
Assert.notNull(date, "日期不能为空!");
cal.setTime(date);
if (cal.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY || cal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) {
return true;
} else {
return false;
}
}
/**
* 判断两端时间是否有重叠(交集)
* @param begin1 第一段时间的开始
* @param end1 第一段时间的结束
* @param begin2 第二段时间的开始
* @param end2 第二段时间的结束
* @return
*/
public static Boolean intersectionDate(Date begin1,Date end1,Date begin2,Date end2){
if(begin1==null || end1==null || begin2==null || end2==null){
throw new RuntimeException("入参不能为空");
}
return (begin1.before(end2) || begin1.equals(end2))&& (end1.after(begin2) || end1.equals(begin2));
}
}
Java日期工具类
最新推荐文章于 2024-01-17 22:30:28 发布