import org.apache.commons.lang3.StringUtils;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.Locale;
/**
* 日期/時間 工具類
*
* @author wongH
* @date 2020/6/15 10:27
* @Version 1.0
*/
public class DateTimeUtil {
public static void main(String[] args) {
Long dateStamp = string2TimeStamp("2020-04-12", "yyyy-MM-dd", true);
System.err.println("1===> " + dateStamp);
Long timeStamp = string2TimeStamp("2020-04-12 12:59:59", "yyyy-MM-dd HH:mm:ss", false);
System.err.println("2===> " + timeStamp);
String timeStamp2Date = timeStamp2Date(dateStamp, "yyyy-MM-dd");
System.err.println("3===> " + timeStamp2Date);
String timeStamp2Time = timeStamp2Date(timeStamp, "yyyy-MM-dd HH:mm:ss");
System.err.println("4===> " + timeStamp2Time);
String date2String = date2String(new Date(), "yyyy-MM-dd");
System.err.println("5===> " + date2String);
String time2String = date2String(new Date(), "yyyy-MM-dd HH:mm:ss");
System.err.println("6===> " + time2String);
Date date = string2Date(date2String, "yyyy-MM-dd", true);
System.err.println("7===> " + date);
Date time = string2Date(time2String, "yyyy-MM-dd HH:mm:ss", false);
System.err.println("8===> " + time);
}
/**
* 日期/時間 字符串 轉 時間戳
*
* @param dateTime 日期或者時間 字符串。如 日期 :"2020-04-12" 時間: "2020-04-12 12:59:59"
* @param pattern 日期或者時間 格式。 如 日期 :"yyyy-MM-dd" 時間: "yyyy-MM-dd HH:mm:ss"
* @param isDate 是否爲日期 @dateTime 爲日期則傳 true,否則false
* @return 時間戳 毫秒
*/
public static Long string2TimeStamp(String dateTime, String pattern, Boolean isDate) {
DateTimeFormatter ofPattern = DateTimeFormatter.ofPattern(pattern, Locale.CHINA);
if (isDate) {
LocalDate parse = LocalDate.parse(dateTime, ofPattern);
return parse.atStartOfDay().toInstant(ZoneOffset.of("+8")).toEpochMilli();
} else {
LocalDateTime parse = LocalDateTime.parse(dateTime, ofPattern);
return parse.toInstant(ZoneOffset.of("+8")).toEpochMilli();
}
}
/**
* 時間戳 轉 日期/時間 字符串
*
* @param seconds 時間戳 13位毫秒
* @param pattern 時間格式 如 "yyyy-MM-dd HH:mm:ss"
* @return 格式化的時間
*/
public static String timeStamp2Date(Long seconds, String pattern) {
if (StringUtils.isEmpty(pattern)) {
pattern = "yyyy-MM-dd HH:mm:ss";
}
String time = null;
LocalDateTime dateTime = LocalDateTime.ofEpochSecond(seconds / 1000L, 0, ZoneOffset.ofHours(8));
if (seconds != 0) {
time = dateTime.format(DateTimeFormatter.ofPattern(pattern));
}
return time;
}
/**
* 日期/時間 轉 字符串
*
* @param date 日期或者時間 字符串。如 日期 :"2020-04-12" 時間: "2020-04-12 12:59:59"
* @param pattern 日期或者時間 格式。 如 日期 :"yyyy-MM-dd" 時間: "yyyy-MM-dd HH:mm:ss"
* @return 格式化的時間
*/
public static String date2String(Date date, String pattern) {
DateTimeFormatter ofPattern = DateTimeFormatter.ofPattern(pattern, Locale.CHINA);
LocalDateTime localDateTime = date2LocalDateTime(date);
return ofPattern.format(localDateTime);
}
/**
* 字符串 轉 日期/時間
*
* @param date 日期或者時間 字符串。如 日期 :"2020-04-12" 時間: "2020-04-12 12:59:59"
* @param pattern 日期或者時間 格式。 如 日期 :"yyyy-MM-dd" 時間: "yyyy-MM-dd HH:mm:ss"
* @return 格式化的時間 Date
*/
public static Date string2Date(String date, String pattern, Boolean isDate) {
DateTimeFormatter ofPattern = DateTimeFormatter.ofPattern(pattern, Locale.CHINA);
if (isDate) {
LocalDate localDate = LocalDate.parse(date, ofPattern);
return localDate2Date(localDate);
} else {
LocalDateTime localDateTime = LocalDateTime.parse(date, ofPattern);
return localDateTime2Date(localDateTime);
}
}
//==============================================================================================================================
/**
* 將java.util.Date 轉換爲java8 的java.time.LocalDateTime,默認時區爲東8區
*/
public static LocalDateTime date2LocalDateTime(Date date) {
return date.toInstant().atOffset(ZoneOffset.of("+8")).toLocalDateTime();
}
/**
* 將java8 的 java.time.LocalDateTime 轉換爲 java.util.Date,默認時區爲東8區
*/
public static Date localDateTime2Date(LocalDateTime localDateTime) {
return Date.from(localDateTime.toInstant(ZoneOffset.of("+8")));
}
/**
* 將java8 的 java.time.LocalDate 轉換爲 java.util.Date,默認時區爲東8區
*/
public static Date localDate2Date(LocalDate localDate) {
return Date.from(localDate.atStartOfDay().toInstant(ZoneOffset.of("+8")));
}
}
Java8 日期/時間 工具類
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.