package com.common.util;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.apache.commons.lang3.time.DateUtils;
public class DateUtil {
public static final String YYYY_MM_DD = "yyyy-MM-dd";
public static final String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";
private static final long ONE_MINUTE = 60000L;
private static final long ONE_HOUR = 3600000L;
private static final long ONE_DAY = 86400000L;
private static final long ONE_WEEK = 604800000L;
private static final String ONE_SECOND_AGO = "秒前";
private static final String ONE_MINUTE_AGO = "分钟前";
private static final String ONE_HOUR_AGO = "小时前";
private static final String ONE_DAY_AGO = "天前";
private static final String ONE_MONTH_AGO = "月前";
private static final String ONE_YEAR_AGO = "年前";
// 得到?天前的起始时间 00:00:00
public static Date getSomeDayStart(Integer t){
t = (t > 0) ? -t : t;
Calendar cal = new GregorianCalendar();
cal.add(Calendar.DATE, t);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
return cal.getTime();
}
// 得到?天前的结束时间 23:59:59
public static Date getSomeDayEnd(Integer t){
t = (t > 0) ? -t : t;
Calendar cal = new GregorianCalendar();
cal.add(Calendar.DATE, t);
cal.set(Calendar.HOUR_OF_DAY, 23);
cal.set(Calendar.MINUTE, 59);
cal.set(Calendar.SECOND, 59);
return cal.getTime();
}
/**
*
*
* @param date 时间
* @return yyyy-MM-dd HH:mm:ss格式字符串
*
*/
public static String getSimpleDatetime(Date date) {
if (date == null) {
return "";
}
return format(date, YYYY_MM_DD_HH_MM_SS);
}
/**
* 时间格式化
*
* @param date 时间参数
* @param pattern 时间格式(eg:yyyy-MM-dd HH:mm:ss)
* @return 格式后的字符串
*
*/
public static String format(Date date, String pattern) {
return DateFormatUtils.format(date, pattern);
}
/**
* 字符串转时间
*
* @param dateStr 时间字符串
* @param pattern 时间字符串格式
* @return 日期对象
*
*/
public static Date parseDate(String dateStr, String pattern) {
try {
return DateUtils.parseDate(dateStr, pattern);
} catch (ParseException e) {
e.printStackTrace();
return null;
}
}
public static long getDaySub(Date beginDate, Date endDate) {
return (endDate.getTime() - beginDate.getTime()) / (24 * 60 * 60 * 1000);
}
/**
* 计算剩余天数,结束日期和今日都算
*
* @param endTime
*
*/
public static long getSurplusDay(Date endTime) {
long day = 0;
if (endTime == null) {
return day;
}
SimpleDateFormat format = new SimpleDateFormat(YYYY_MM_DD_HH_MM_SS);
String beginStr = format.format(new Date());
String endStr = format.format(endTime);
try {
Date beginDay = format.parse(beginStr);
Date endDay = format.parse(endStr);
long timeBetween = endDay.getTime() - beginDay.getTime();
// 已经结束了
if (timeBetween < 0) {
day = 0;
} else {
day = timeBetween / (24 * 60 * 60 * 1000) + 1;
}
} catch (ParseException e) {
e.printStackTrace();
}
return day;
}
public static Date addDay(Date date, int days) {
return DateUtils.addDays(date, days);
}
//获取指定时间的0点
public static String getStartTimeOfDay(Date d) {
Calendar cal = new GregorianCalendar();
cal.setTime(d);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
return getSimpleDatetime(cal.getTime());
}
//获取指定时间的24点
public static String getEndTimeOfDay(Date d) {
Calendar cal = new GregorianCalendar();
cal.setTime(d);
cal.set(Calendar.HOUR_OF_DAY, 23);
cal.set(Calendar.MINUTE, 59);
cal.set(Calendar.SECOND, 59);
return getSimpleDatetime(cal.getTime());
}
// 获得当前月的天数
public static int getDayOfMonth() {
Calendar calendar = Calendar.getInstance(Locale.CHINA);
int day = calendar.getActualMaximum(Calendar.DATE);
return day;
}
// 获得指定日期的月的天数
public static int getDayOfMonth(Date d) {
Calendar calendar = Calendar.getInstance(Locale.CHINA);
calendar.setTime(d);
int day = calendar.getActualMaximum(Calendar.DATE);
return day;
}
/**
* 将一个时间戳转换成提示性时间字符串,如刚刚,1秒前
*
* @param date
* @return
*/
public static String dateConvertToString(Date date) {
if (date == null) {
return "";
}
long delta = new Date().getTime() - date.getTime();
if (delta < 1L * ONE_MINUTE) {
long seconds = toSeconds(delta);
return (seconds <= 0 ? 1 : seconds) + ONE_SECOND_AGO;
}
if (delta < 45L * ONE_MINUTE) {
long minutes = toMinutes(delta);
return (minutes <= 0 ? 1 : minutes) + ONE_MINUTE_AGO;
}
if (delta < 24L * ONE_HOUR) {
long hours = toHours(delta);
return (hours <= 0 ? 1 : hours) + ONE_HOUR_AGO;
}
if (delta < 48L * ONE_HOUR) {
return "昨天";
}
if (delta < 30L * ONE_DAY) {
long days = toDays(delta);
return (days <= 0 ? 1 : days) + ONE_DAY_AGO;
}
if (delta < 12L * 4L * ONE_WEEK) {
long months = toMonths(delta);
return (months <= 0 ? 1 : months) + ONE_MONTH_AGO;
} else {
long years = toYears(delta);
return (years <= 0 ? 1 : years) + ONE_YEAR_AGO;
}
}
public static long toSeconds(long date) {
return date / 1000L;
}
public static long toMinutes(long date) {
return toSeconds(date) / 60L;
}
public static long toHours(long date) {
return toMinutes(date) / 60L;
}
public static long toDays(long date) {
return toHours(date) / 24L;
}
public static long toMonths(long date) {
return toDays(date) / 30L;
}
public static long toYears(long date) {
return toMonths(date) / 365L;
}
}
package com.common.util;
import java.text.Pars