# 好用的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; } } ```