DateUtil 处理时间工具类
/** * 获取日期中的某数值。如获取月份 * * @param date 日期 * @param dateType 日期格式 * @return 数值 */ private static int getInteger(Date date, int dateType) { int num = 0; Calendar calendar = Calendar.getInstance(); if (date != null) { calendar.setTime(date); num = calendar.get(dateType); } return num; }/**
- 增加日期中某类型的某数值。如增加日期
- @param date 日期
- @param dateType 类型
- @param amount 数值
- @return 计算后日期
*/
public static Date addInteger(Date date, int dateType, int amount) {
Date myDate = null;
if (date != null) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(dateType, amount);
myDate = calendar.getTime();
}
return myDate;
}
/**
- 增加日期的年份。失败返回null。
- @param date 日期
- @param yearAmount 增加数量。可为负数
- @return 增加年份后的日期
*/
public static Date addYear(Date date, int yearAmount) {
return addInteger(date, Calendar.YEAR, yearAmount);
}
/**
- 增加日期的月份。失败返回null。
- @param date 日期
- @param monthAmount 增加数量。可为负数
- @return 增加月份后的日期
*/
public static Date addMonth(Date date, int monthAmount) {
return addInteger(date, Calendar.MONTH, monthAmount);
}
/**
- 增加日期的天数。失败返回null。
- @param date 日期
- @param dayAmount 增加数量。可为负数
- @return 增加天数后的日期
*/
public static Date addDay(Date date, int dayAmount) {
return addInteger(date, Calendar.DATE, dayAmount);
}
/**
- 增加日期的小时。失败返回null。
- @param date 日期
- @param hourAmount 增加数量。可为负数
- @return 增加小时后的日期
*/
public static Date addHour(Date date, int hourAmount) {
return addInteger(date, Calendar.HOUR_OF_DAY, hourAmount);
}
/**
- 增加日期的分钟。失败返回null。
- @param date 日期
- @param minuteAmount 增加数量。可为负数
- @return 增加分钟后的日期
*/
public static Date addMinute(Date date, int minuteAmount) {
return addInteger(date, Calendar.MINUTE, minuteAmount);
}
/**
- 增加日期的秒钟。失败返回null。
- @param date 日期
- @param secondAmount 增加数量。可为负数
- @return 增加秒钟后的日期
*/
public static Date addSecond(Date date, int secondAmount) {
return addInteger(date, Calendar.SECOND, secondAmount);
}
/**
- 获取日期的年份。失败返回0。
- @param date 日期
- @return 年份
*/
public static int getYear(Date date) {
return getInteger(date, Calendar.YEAR);
}
/**
- 获取日期的月份。失败返回0。
- @param date 日期
- @return 月份
*/
public static int getMonth(Date date) {
return getInteger(date, Calendar.MONTH) + 1;
}
/**
- 获取日期的天数。失败返回0。
- @param date 日期
- @return 天
*/
public static int getDay(Date date) {
return getInteger(date, Calendar.DATE);
}
/**
- 根据日期获取相差天数
- @param start
- @param end
- @return
*/
public static int getDayBetweenDayNot(Date start, Date end) {
long diff = end.getTime() - start.getTime();
long bet = TimeUnit.DAYS.convert(diff, TimeUnit.MILLISECONDS);
if (bet > Integer.MAX_VALUE) {
throw new IllegalArgumentException("between days overflow");
}
return (int) bet;
}
/**
- 根据日期获取相差天数
- @param start yyyyMMdd
- @param end yyyyMMdd
- @return
*/
public static int getDayBetweenDays(Date start, Date end) {
long diff = end.getTime() - start.getTime();
long bet = TimeUnit.DAYS.convert(diff, TimeUnit.MILLISECONDS);
if (bet > Integer.MAX_VALUE) {
throw new IllegalArgumentException("between days overflow");
}
return (int) bet + 1;
}
/**
- 获取日期的小时。失败返回0。
- @param date 日期
- @return 小时
*/
public static int getHour(Date date) {
return getInteger(date, Calendar.HOUR_OF_DAY);
}
/**
- 获取日期的分钟。失败返回0。
- @param date 日期
- @return 分钟
*/
public static int getMinute(Date date) {
return getInteger(date, Calendar.MINUTE);
}
/**
- 获取日期的秒钟。失败返回0。
- @param date 日期
- @return 秒钟
*/
public static int getSecond(Date date) {
return getInteger(date, Calendar.SECOND);
}
/**
-
获取距离当天 23.59.59,剩余的秒时间。
-
@return 秒钟
/
public static Long getTimeRemaining() {
/*- 当前时间毫秒数
/
long current = System.currentTimeMillis();
/* - 今天零点零分零秒的毫秒数
/
long zero = current / (1000 * 3600 * 24) * (1000 * 3600 * 24) - TimeZone.getDefault().getRawOffset();
/* - 今天23点59分59秒的毫秒数
*/
long twelve = zero + 24 * 60 * 60 * 1000 - 1;
return (twelve - current) / 1000;
} - 当前时间毫秒数
public static List<Date> getDateList(Date deliveryStDt, Date deliveryEdDt) {
List<Date> list = new ArrayList<>();
list.add(deliveryStDt);
while (true) {
Date date = addDay(deliveryStDt, 1);
// <
if (date != null && date.before(deliveryEdDt)) {
list.add(deliveryStDt);
}
break;
}
return list;
}
/**
- 当前月最后一天
- @return
*/
public static String lastdate() {
Calendar cale = Calendar.getInstance();
SimpleDateFormat format = new SimpleDateFormat(DATE_FORMAT_SIX);
cale.add(Calendar.MONTH, 1);
cale.set(Calendar.DAY_OF_MONTH, 0);
return format.format(cale.getTime());
}
/**
- 当前月第一天
- @return
*/
public static String firstdate() {
Calendar cale = Calendar.getInstance();
SimpleDateFormat format = new SimpleDateFormat(DATE_FORMAT_SIX);
// 获取当前月的第一天
cale.add(Calendar.MONTH, 0);
cale.set(Calendar.DAY_OF_MONTH, 1);
return format.format(cale.getTime());
}
/**
- 当前年月
- @return
*/
public static String currentdate() {
SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月");
return format.format(new Date());
}
/**
- 当前系统日期T1所在月的下一月的第5日
- @return
*/
public static Date nextdate() {
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.MONTH, 1);
calendar.set(Calendar.DAY_OF_MONTH, 5);
return calendar.getTime();
}
/**
- 当前系统日期T1所在月的下一月的最后一日
- @return
*/
public static Date nextlastdate() {
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.MONTH, 2);
calendar.set(Calendar.DAY_OF_MONTH, 0);
return calendar.getTime();
}
/**
- 获得日期的开始时间,即2012-01-01 00:00:00
- @return
*/
public static Date getDayStartTime(Date date) {
Calendar c = Calendar.getInstance();
c.setTime(date);
c.set(Calendar.HOUR_OF_DAY, 0);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);
return c.getTime();
}
/**
- 获得日期的结束时间,即2012-01-01 23:59:59
- @return
*/
public static Date getDayEndTime(Date date) {
Calendar c = Calendar.getInstance();
c.setTime(date);
c.set(Calendar.HOUR_OF_DAY, 23);
c.set(Calendar.MINUTE, 59);
c.set(Calendar.SECOND, 59);
return c.getTime();
}
/**
- 当前系统日期T1所在日初始时间 2020-05-06
- @return
*/
public static Date initDate() {
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DAY_OF_MONTH);
calendar.clear();
calendar.set(year, month, day);
return calendar.getTime();
}
/**
- 获得本周的第一天,周一
- @return
*/
public static Date getCurrentWeekDayStartTime() {
SimpleDateFormat longSdf = new SimpleDateFormat(DATE_FORMAT_FOUR);
SimpleDateFormat shortSdf = new SimpleDateFormat(DATE_FORMAT_SIX);
Calendar c = Calendar.getInstance();
try {
int weekday = c.get(Calendar.DAY_OF_WEEK) - 2;
c.add(Calendar.DATE, -weekday);
c.setTime(longSdf.parse(shortSdf.format(c.getTime()) + " 00:00:00"));
} catch (Exception e) {
log.error("getCurrentWeekDayStartTime异常{}", e.toString());
}
return c.getTime();
}
/**
- 获得本周的最后一天,周日
- @return
*/
public static Date getCurrentWeekDayEndTime() {
SimpleDateFormat longSdf = new SimpleDateFormat(DATE_FORMAT_FOUR);
SimpleDateFormat shortSdf = new SimpleDateFormat(DATE_FORMAT_SIX);
Calendar c = Calendar.getInstance();
try {
int weekday = c.get(Calendar.DAY_OF_WEEK);
c.add(Calendar.DATE, 8 - weekday);
c.setTime(longSdf.parse(shortSdf.format(c.getTime()) + " 23:59:59"));
} catch (Exception e) {
log.error("getCurrentWeekDayEndTime异常{}", e.toString());
}
return c.getTime();
}
/**
- 获得本月的开始时间
- @return
*/
public static Date getCurrentMonthStartTime() {
SimpleDateFormat shortSdf = new SimpleDateFormat(DATE_FORMAT_SIX);
Calendar c = Calendar.getInstance();
Date now = null;
try {
c.set(Calendar.DATE, 1);
now = shortSdf.parse(shortSdf.format(c.getTime()));
} catch (Exception e) {
log.error("getCurrentMonthStartTime异常{}", e.toString());
}
return now;
}
/**
- 本月的结束时间
- @return
*/
public static Date getCurrentMonthEndTime() {
SimpleDateFormat longSdf = new SimpleDateFormat(DATE_FORMAT_FOUR);
SimpleDateFormat shortSdf = new SimpleDateFormat(DATE_FORMAT_SIX);
Calendar c = Calendar.getInstance();
Date now = null;
try {
c.set(Calendar.DATE, 1);
c.add(Calendar.MONTH, 1);
c.add(Calendar.DATE, -1);
now = longSdf.parse(shortSdf.format(c.getTime()) + " 23:59:59");
} catch (Exception e) {
log.error("getCurrentMonthEndTime异常{}", e.toString());
}
return now;
}
public static Long getCurrentDateCounter(Date date) {
if (date == null) {
return 0L;
}
return (date.getTime() - System.currentTimeMillis()) / 1000;
}