Java8之後常用的時間日期之間的轉換工具類
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
/**
* 實際開發中比較常用時間日期的各種轉換
* @author 桑偉東
*
*/
public class DateTimeUtil {
/**
* 預設的時間日期樣式
*/
private static final String DEFAULT_PATTERN = "yyyy-MM-dd HH:mm:ss";
/**
* 系統預設的時區
*/
// private static final ZoneId ZONE_ID= ZoneId.systemDefault();
/**
* 中國時區
*/
private static final ZoneId ZONE_ID = ZoneId.of("Asia/Shanghai");
public static void main(String[] args) {
String dateTime = formatEpochSecond("yyyy-MM-dd HH:mm:ss", 1525767228);
System.out.println(dateTime);
String parseStrToNewStr = parseStrToNewStr("yyyy-MM-dd HH:mm:ss", "2018-05-08 16:13:48", "MM-dd");
System.out.println(parseStrToNewStr);
long parseDateTime = parseDateTime("yyyy-MM-dd HH:mm:ss", "2018-05-08 16:13:48");
System.out.println(parseDateTime);
long parseDateTime2 = DefaultParseDateTime("2018-05-08 16:13:48");
System.out.println(parseDateTime2);
String yesterdayStr = yesterdayStr(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
System.out.println(yesterdayStr);
System.out.println(ZoneId.getAvailableZoneIds());
}
/**
* 按照預設的模板將時間戳轉換為時間日期的字串形式
*
* @param epochSecond
* 時間戳 1525767228
* @return 返回時間日期的字串形式 2018-05-08 16:13:48
*/
public static String DefaultFormatEpochSecond(long epochSecond) {
LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochSecond(epochSecond),
ZoneId.systemDefault());
return localDateTime.format(DateTimeFormatter.ofPattern(DEFAULT_PATTERN));
}
/**
* 按照給定的時間日期模版,將時間戳轉換成字串形式
*
* @param pattern
* 模版,例如"yyyy-MM-dd HH:mm:ss"
* @param epochSecond
* 時間戳 1525767228
* @return 轉換後的字串 2018-05-08 16:13:48
*/
public static String formatEpochSecond(String pattern, long epochSecond) {
LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochSecond(epochSecond),
ZoneId.systemDefault());
return localDateTime.format(DateTimeFormatter.ofPattern(pattern));
}
/**
* 按照給定的時間日期模版,將時間戳轉換成字串形式
*
* @param dateTimeFormatter
* 模版
* @param epochSecond
* 時間戳
* @return 轉換後的字串
*/
public static String formatEpochSecond(DateTimeFormatter dateTimeFormatter, long epochSecond) {
LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochSecond(epochSecond),
ZoneId.systemDefault());
return localDateTime.format(dateTimeFormatter);
}
/**
* 將一種時間日期字串轉換成另外一種形式
*
* @param oldPattern
* 舊的時間日期字串樣式 "yyyy-MM-dd HH:mm:ss"
* @param oldDateTime
* 舊的時間日期字串 2018-05-08 16:13:48
* @param newPattern
* 新的時間日期字串樣式 "MM-dd"
* @return 轉換後的字串 05-08
*/
public static String parseStrToNewStr(String oldPattern, String oldDateTime, String newPattern) {
LocalDateTime localDateTime = LocalDateTime.parse(oldDateTime, DateTimeFormatter.ofPattern(oldPattern));
return localDateTime.format(DateTimeFormatter.ofPattern(newPattern));
}
/**
* 將一種時間日期字串轉換成另外一種形式
*
* @param oldDateTimeFormatter
* 舊的時間日期字串樣式
* @param oldDateTime
* 舊的時間日期字串
* @param newDateTimeFormatter
* 新的時間日期字串樣
* @return 轉換後的字串
*/
public static String parseStrToNewStr(DateTimeFormatter oldDateTimeFormatter, String oldDateTime,
DateTimeFormatter newDateTimeFormatter) {
LocalDateTime localDateTime = LocalDateTime.parse(oldDateTime, oldDateTimeFormatter);
return localDateTime.format(newDateTimeFormatter);
}
/**
* 將給定的時間日期字串按照指定的模版解析成時間戳
*
* @param pattern
* 模版,例如"yyyy-MM-dd HH:mm:ss"
* @param dateTime
* 時間日期字串 2018-05-08 16:13:48
* @return 時間戳 1525767228000
*/
public static long parseDateTime(String pattern, String dateTime) {
LocalDateTime localDateTime = LocalDateTime.parse(dateTime, DateTimeFormatter.ofPattern(pattern));
Instant instant = localDateTime.atZone(ZONE_ID).toInstant();
return instant.toEpochMilli();
}
/**
* 將給定的時間日期字串按照指定的模版解析成時間戳
*
* @param dateTimeFormatter
* 模版
* @param dateTime
* 時間日期字串
* @return 時間戳
*/
public static long parseDateTime(DateTimeFormatter dateTimeFormatter, String dateTime) {
LocalDateTime localDateTime = LocalDateTime.parse(dateTime, dateTimeFormatter);
Instant instant = localDateTime.atZone(ZONE_ID).toInstant();
return instant.toEpochMilli();
}
/**
* 將給定的時間日期字串按照預設的模版解析成時間戳 "yyyy-MM-dd HH:mm:ss"
*
* @param dateTime
* 2018-05-08 16:13:48
* @return 時間戳 1525767228000
*/
public static long DefaultParseDateTime(String dateTime) {
LocalDateTime localDateTime = LocalDateTime.parse(dateTime, DateTimeFormatter.ofPattern(DEFAULT_PATTERN));
Instant instant = localDateTime.atZone(ZONE_ID).toInstant();
return instant.toEpochMilli();
}
/**
* 按照給定的格式獲取昨天這個時候的時間日期字串
*
* @param dateTimeFormatter
* 時間日期格式
* @return
*/
public static String yesterdayStr(DateTimeFormatter dateTimeFormatter) {
LocalDateTime localDateTime = LocalDateTime.now().plusDays(-1);
return localDateTime.format(dateTimeFormatter);
}
/**
* 按照給定的格式獲取昨天這個時候的時間日期字串
*
* @param pattern
* 時間日期格式
* @return
*/
public static String yesterdayStr(String pattern) {
LocalDateTime localDateTime = LocalDateTime.now().plusDays(-1);
return localDateTime.format(DateTimeFormatter.ofPattern(pattern));
}
/**
* 按照給定的格式獲取當前時間日期字串
*
* @param pattern
* 時間日期格式
* @return
*/
public static String todayStr(String pattern) {
LocalDateTime localDateTime = LocalDateTime.now();
return localDateTime.format(DateTimeFormatter.ofPattern(pattern));
}
/**
* 按照給定的格式獲取當前時間日期字串
*
* @param dateTimeFormatter
* 時間日期格式
* @return
*/
public static String todayStr(DateTimeFormatter dateTimeFormatter) {
LocalDateTime localDateTime = LocalDateTime.now();
return localDateTime.format(dateTimeFormatter);
}
/**
* 獲取昨天這個時間的時間戳
*
* @return 時間戳
*/
public static long yesterday() {
LocalDateTime localDateTime = LocalDateTime.now().plusDays(-1);
return localDateTime.atZone(ZONE_ID).toInstant().toEpochMilli();
}
}