package com.wanmi.sbc.common.util;
import org.apache.commons.lang3.StringUtils;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.Date;
/**
* Created by zhangjin on 2017/4/28.
*/
public class DateUtil {
public static final String FMT_DATE_1 = "yyyy-MM-dd";
public static final String FMT_TIME_1 = "yyyy-MM-dd HH:mm:ss";
public static final String FMT_TIME_2 = "yyyy-MM-dd HH:mm";
public static final String FMT_TIME_3 = "yyyyMMddHHmmss";
public static final String FMT_DATE_3 = "MMddHH";
public static final String FMT_TIME_4 = "yyyy-MM-dd HH:mm:ss.SSS";
public static final String FMT_TIME_5 = "yyyyMMdd";
public static final String FMT_TIME_6 = "yyyy-MM-dd HH";
/**
* 轉換類型 string to LocalDateTime
*
* @param time time
* @return LocalDateTime
*/
public static LocalDateTime parseDate(String time) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(FMT_TIME_2);
return LocalDateTime.of(LocalDate.parse(time, formatter), LocalTime.MIN);
}
/**
* 轉換類型 string to LocalDateTime
*
* @param time time
* @return LocalDateTime
*/
public static String getDate(LocalDateTime time) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(FMT_DATE_1);
return formatter.format(time);
}
/**
* 轉換類型 string to LocalDateTime
* 2017-06-23 -> 2017-06-23 00:00
*
* @param time time
* @return LocalDateTime
*/
public static LocalDateTime parseDay(String time) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(FMT_DATE_1);
return LocalDate.parse(time, formatter).atStartOfDay();
}
/**
* 獲取全部當前時間
* @return
*/
public static String nowTime(){
return format(LocalDateTime.now(), FMT_TIME_1);
}
/**
* 獲取當前時間
* @return
*/
public static String nowDate(){
return format(LocalDateTime.now(),FMT_DATE_1);
}
/**
* 獲取當前時間 到小時
* @return
*/
public static String nowHourTime(){
return format(LocalDateTime.now(),FMT_TIME_6);
}
/**
* 獲取當前時間10位時間戳
* @return
*/
public static String nowTen() {
int now = (int) (System.currentTimeMillis() / 1000);
return String.valueOf(now);
}
/**
* 獲取昨天時間
* @return
*/
public static String yesterdayDate(){
Calendar cal=Calendar.getInstance();
cal.add(Calendar.DATE,-1);
return format(cal.getTime(),FMT_DATE_1);
}
/**
* 獲取明天時間
* @return
*/
public static String tomorrowDate(){
Calendar cal=Calendar.getInstance();
cal.add(Calendar.DATE,1);
return format(cal.getTime(),FMT_DATE_1);
}
/**
* 轉換類型 LocalDateTime to string
*
* @param time time
* @return LocalDateTime
*/
public static String format(LocalDateTime time, String fmt) {
return time.format(DateTimeFormatter.ofPattern(fmt));
}
/**
* 轉換類型 Date to string
*
* @param time time
* @return LocalDateTime
*/
public static String format(Date time, String fmt) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(fmt);
return simpleDateFormat.format(time);
}
/**
* 轉換類型 string to LocalDateTime
*
* @param time time
* @return LocalDateTime
*/
public static LocalDateTime parse(String time, String fmt) {
return LocalDateTime.parse(time, DateTimeFormatter.ofPattern(fmt));
}
/**
* 時間類型轉換爲LocalDateTime, 針對*request中帶有canEmpty註解的時間屬性
* 如果沒有canEmpty註解, 需要在外層判斷爲空則不調用該方法
* 使用時需要位於copyProperties上方
* 場景: 修改信息,
* 有值:
* 1.前端如果修改值, 傳遞到後端則爲yyyy-MM-dd類型, 長度爲10
* 2.如果不做修改則爲yyyy-MM-dd HH:mm:ss.SSS類型
* 無值:
* 保存爲null
* @param time 時間
* @return
*/
public static LocalDateTime parseDayCanEmpty(String time) {
DateTimeFormatter formatter1 = DateTimeFormatter.ofPattern(FMT_DATE_1);
DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern(FMT_TIME_4);
if(StringUtils.isNotBlank(time)) {
if(time.length() == 10) {
return LocalDateTime.of(LocalDate.parse(time, formatter1), LocalTime.MIN);
} else {
return LocalDateTime.parse(time, formatter2);
}
}
return null;
}
}