import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import org.apache.commons.codec.binary.StringUtils;
import org.apache.xmlbeans.impl.regex.ParseException;
/**
* @author wanghang
* @Description 时间工具类
* @date: 2018/04/28 16:52
*/
public class DateUtil {
/**
* 国际化时间格式 2017-11-7T17:02:07+08:00
*/
private static final String YMDHMSXXX = "yyyy-MM-dd'T'HH:mm:ssXXX";
/**
* yyyy-MM-dd HH:mm:ss
*/
private static final String YMDHMS = "yyyy-MM-dd HH:mm:ss";
/**
* dd-MM-yyyy
*/
private static final String DMY = "dd-MM-yyyy";
/**
* MM-dd-yyyy
*/
private static final String MDY = "MM-dd-yyyy";
/**
* dd-MM-yyyy HH:mm
*/
private static final String DMYHM = "dd-MM-yyyy HH:mm";
/**
* 时间格式化
* @param date
* @param formatPattern
* @return java.lang.String
* @Date 2018/04/28
*/
public static String format(Date date, String formatPattern) {
if (date == null) {
return "";
}
SimpleDateFormat f = new SimpleDateFormat(formatPattern);
return f.format(date);
}
/**
* 日期格式字符转成日期
* @param date
* @param formatPattern
* @return java.util.Date
* @Date: 2018/04/28
*/
public static Date parse(String date, String formatPattern) throws ParseException {
if (StringUtils.isBlank(date)) {
return null;
}
SimpleDateFormat f = new SimpleDateFormat(formatPattern);
return f.parse(date);
}
/**
* 当前时间+day,指定hour,分秒置为零
* @param day
* @param hour
* @return
*/
public static Date addDay(int day, int hour) {
// 取时间
Date date = new Date();
Calendar calendar = new GregorianCalendar();
calendar.setTime(date);
calendar.set(Calendar.HOUR_OF_DAY, hour);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.add(Calendar.DATE, day);
return calendar.getTime();
}
/**
* 当前时间+day,时分秒置为零
* @param day
* @return
*/
public static Date addDay(int day) {
// 取时间
Date date = new Date();
Calendar calendar = new GregorianCalendar();
calendar.setTime(date);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.add(Calendar.DATE, day);// 把日期往后增加一天.整数往后推,负数往前移动
// 这个时间就是日期往后推一天的结果
return calendar.getTime();
}
/**
* 指定时间+day 时分秒置为零
* @param day
* @param date
* @return
*/
public static Date addDay(int day, Date date) {
Calendar calendar = new GregorianCalendar();
calendar.setTime(date);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.add(Calendar.DATE, day);// 把日期往后增加一天.整数往后推,负数往前移动
// 这个时间就是日期往后推一天的结果
return calendar.getTime();
}
/**
* 指定时间+day 时分秒不变
* @param day
* @param date
* @return
*/
public static Date addDay2(int day, Date date) {
Calendar calendar = new GregorianCalendar();
calendar.setTime(date);
calendar.add(Calendar.DATE, day);// 把日期往后增加一天.整数往后推,负数往前移动
// 这个时间就是日期往后推一天的结果
return calendar.getTime();
}
/**
* 描述:获取传入日期所在天的最后一秒
* 比如,传入当天的最后一秒是:2018-04-10 23:59:59
* @param Date
*/
public static Date getLastDate(Date date) {
Calendar para = Calendar.getInstance(java.util.Locale.CHINA);
para.setTime(date);
para.set(Calendar.HOUR_OF_DAY, 23);
para.set(Calendar.MINUTE, 59);
para.set(Calendar.SECOND, 59);
return para.getTime();
}
/**
* 获得传入时间所在月最后一天的的最后一秒
* @param date
* @return
*/
public static Date getLastDateTimeOfMonth(Date date){
Calendar c = Calendar.getInstance();
c.setTime(date);
c.set(Calendar.DAY_OF_MONTH, c.getActualMaximum(Calendar.DAY_OF_MONTH));
c.set(Calendar.HOUR_OF_DAY, c.getActualMaximum(Calendar.HOUR_OF_DAY));
c.set(Calendar.MINUTE, c.getActualMaximum(Calendar.MINUTE));
c.set(Calendar.SECOND, c.getActualMaximum(Calendar.SECOND));
return c.getTime();
}
/**
* 得到n天之后是周几
* @param days
* @return
*/
public static String getAfterDayWeek(int days) {
Calendar canlendar = Calendar.getInstance(); // java.util包
canlendar.add(Calendar.DATE, days); // 日期减 如果不够减会将月变动
Date date = canlendar.getTime();
SimpleDateFormat sdf = new SimpleDateFormat("E");
String dateStr = sdf.format(date);
return dateStr;
}
/**
* <li>功能描述:时间相减得到天数
* @param beginDateStr
* @param endDateStr
* @return
* long
*/
public static long getDaySub(String beginDateStr, String endDateStr) {
long day = 0;
java.text.SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
java.util.Date beginDate = null;
java.util.Date endDate = null;
try {
beginDate = format.parse(beginDateStr);
endDate = format.parse(endDateStr);
} catch (ParseException e) {
e.printStackTrace();
}
day = (endDate.getTime() - beginDate.getTime()) / (24 * 60 * 60 * 1000);
// System.out.println("相隔的天数="+day);
return day;
}
/**
* @Title: compareDate
* @Description:(日期比较,如果s>=e 返回true 否则返回false)
* @param s
* @param e
* @return boolean
* @throws
* @author
*/
public static boolean compareDate(String s, String e) {
if (fomatDate(s) == null || fomatDate(e) == null) {
return false;
}
return fomatDate(s).getTime() >= fomatDate(e).getTime();
}
/**
* 格式化日期
*
* @return
*/
public static Date fomatDate(String date) {
DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
try {
return fmt.parse(date);
} catch (ParseException e) {
e.printStackTrace();
return null;
}
}
/**
* 把时间根据时、分、秒转换为时间段
* @param StrDate
*/
public static String getTimes(String strDate) throws ParseException{
String resultTimes = "";
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date now = new Date();
java.util.Date date = df.parse(strDate);
long times = now.getTime() - date.getTime();
long day = times / (24 * 60 * 60 * 1000);
long hour = (times / (60 * 60 * 1000) - day * 24);
long min = ((times / (60 * 1000)) - day * 24 * 60 - hour * 60);
long sec = (times / 1000 - day * 24 * 60 * 60 - hour * 60 * 60 - min * 60);
StringBuffer sb = new StringBuffer();
// sb.append("发表于:");
if (hour > 0) {
sb.append(hour + "小时前");
} else if (min > 0) {
sb.append(min + "分钟前");
} else {
sb.append(sec + "秒前");
}
resultTimes = sb.toString();
return resultTimes;
}
/**
* 获取当前系统时间(时间的表达格式为当前计算机时间和GMT时间(格林威治时间)1970年1月1号0时0分
* 0秒所差的毫秒数)
*
*/
public static String getTimestamp() {
return String.valueOf(System.currentTimeMillis() / 1000);
}
}