# 好用的DateUtil
```java=\
package com.camiol.utils;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import org.apache.activemq.filter.function.splitFunction;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
/**
* 處理Date相關共用函數
*
* @author
*/
public class DateUtil implements java.io.Serializable {
private static final long serialVersionUID = 1L;
private static final Logger log = LogManager.getLogger(DateUtil.class);
/**
* 字串 轉換成 日期(Date型態)。 例:getDate("2010-06-10 17:30:25", "yyyy-MM-dd HH:mm:ss")
*
* @param strDate 日期字串
* @param pattern 日期格式
* @return Date
* @author Nicklee 2021/04/12
*/
public static Date getDate(String strDate, String pattern) {
Date date = null;
try {
SimpleDateFormat dateFt = new SimpleDateFormat(pattern);
date = dateFt.parse(strDate);
} catch (ParseException e) {
log.warn("DateUtil.getDate(strDate, pattern) Error! Exception: ", e);
}
return date;
}
/**
* 日期 轉換成 字串。例: "yyyy-MM-dd HH:mm:ss"
*
* @param date 日期
* @param pattern 日期格式
* @return String
* @author nicklee 2021/04/12
*/
public static String getDate(Date date, String pattern) {
String sDate = null;
try {
SimpleDateFormat dateFt = new SimpleDateFormat(pattern);
sDate = dateFt.format(date);
} catch (IllegalArgumentException e) {
log.warn("DateUtil.getDate(date, pattern) Error! IllegalArgumentException: ", e);
} catch (NullPointerException e) {
log.warn("DateUtil.getDate(date, pattern) Error! NullPointerException : ", e);
} catch (Exception e) {
log.warn("DateUtil.getDate(date, pattern) Error! Exception: ", e);
}
return sDate;
}
/**
* 處理起始日期轉換為timestamp
*
* @param date 日期
* @return long
* @author nicklee 2021/04/23
*/
public static long getStartDate(String date, String pattern) {
date = date + " " + Const.DATE_FORMAT_START; // 先加00:00:00
Date firstDate = getDate(date, pattern); // 將原始傳入日期字串轉換為日期
return firstDate.getTime();
}
/**
* 處理起始日期轉換為timestamp
*
* @param date 日期
* @return long
* @author nicklee 2021/04/23
*/
public static long getStartEnd(String date, String pattern) {
date = date + " " + Const.DATE_FORMAT_END; // 先加00:00:00
Date firstDate = getDate(date, pattern); // 將原始傳入日期字串轉換為日期
return firstDate.getTime();
}
public static String converseInstantToDateStr(String times) {
DateTimeFormatter dtfDate = DateTimeFormatter.ofPattern("yyyyMMdd").withZone(ZoneId.systemDefault());
String[] timesArray = times.split("\\.");
if (timesArray.length > 1) {
Instant inst = Instant.ofEpochSecond(Long.parseLong(timesArray[0]), Long.parseLong(timesArray[1]));
return dtfDate.format(inst);
}
return null;
}
public static String converseInstantToTimeStr(String times) {
DateTimeFormatter dtfTime = DateTimeFormatter.ofPattern("HHmmss").withZone(ZoneId.systemDefault());
String[] timesArray = times.split("\\.");
if (timesArray.length > 1) {
Instant inst = Instant.ofEpochSecond(Long.parseLong(timesArray[0]), Long.parseLong(timesArray[1]));
return dtfTime.format(inst);
}
return null;
}
public static String converseZoneDateTimeToDateStr(String times) {
SimpleDateFormat sdfDate = new SimpleDateFormat("yyyyMMdd");
ZonedDateTime dateTime = ZonedDateTime.parse(times);
long offsetMillis = ZoneOffset.from(dateTime).getTotalSeconds() * 1000;
long isoMillis = dateTime.toInstant().toEpochMilli();
Date date = new Date(isoMillis + offsetMillis);
return sdfDate.format(date);
}
public static String converseZoneDateTimeToTimeStr(String times) {
SimpleDateFormat sdfTime = new SimpleDateFormat("HHmmss");
ZonedDateTime dateTime = ZonedDateTime.parse(times);
long offsetMillis = ZoneOffset.from(dateTime).getTotalSeconds() * 1000;
long isoMillis = dateTime.toInstant().toEpochMilli();
Date date = new Date(isoMillis + offsetMillis);
return sdfTime.format(date);
}
//按照指定的時間格式來相減後回傳毫秒差
public static long diffDateTime(String dateStrBegin, String dateStrEnd , SimpleDateFormat sdf) {
if (StringUtils.isBlank(dateStrBegin) || StringUtils.isBlank(dateStrEnd)) {
return 0;
}
long millisecond = 0;
Date dateBegin = null;
Date dateEnd = null;
try {
dateBegin = sdf.parse(dateStrBegin);
dateEnd = sdf.parse(dateStrEnd);
} catch (ParseException e) {
log.info("e: {}", e);
}
if (dateBegin != null && dateEnd != null) {
millisecond = dateEnd.getTime() - dateBegin.getTime();
}
return millisecond;
}
}
```