時間類型轉換。
############################################################
//儘量避免使用這種方式獲得 Instant 時間,2020-03-21T15:14:42.071 直接獲得本地時間,表示的是 帶T 的本地時間,格式是國際時間,時間不是
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println("---------localDateTime------------>" + localDateTime);
############################################################
String <-----> Date <-----> Instant
三種時間類型直之間的相互轉換
/**
* 時間轉換
* String <--> date <--> instant
* @author y_zzu 2020-03-21-14:48
*/
public class TimeUtils {
/**
* 將時間字符串 轉換爲Instant 國際時間
* @param string 時間
* @return Instant
*/
public static final Instant StringToInstant(String string) {
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
//將 string 裝換成帶有 T 的國際時間,但是沒有進行,時區的轉換,即沒有將時間轉爲國際時間,只是格式轉爲國際時間
LocalDateTime parse = LocalDateTime.parse(string, dateTimeFormatter);
//+8 小時,offset 可以理解爲時間偏移量
ZoneOffset offset = OffsetDateTime.now().getOffset();
//轉換爲 通過時間偏移量將 string -8小時 變爲 國際時間,因爲亞洲上海是8時區
Instant instant = parse.toInstant(offset);
return instant;
}
/**
* String ---> date---> Instant
* @param s 2020-03-21 17:23:54
* @return 2020-03-21T09:23:54Z
* @throws ParseException 拋出異常
*/
public static final Instant StringToDateToInstant(String s) throws ParseException {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = dateFormat.parse(s);
Instant instant = date.toInstant();
return instant;
}
/**
* instant 轉成 String
* @param instant 國際時間
* @return
*/
public static final String InstantToDateToString(Instant instant) {
//將 instant 轉成 date
Date from = Date.from(instant);
//將 date 轉成 string,調用上面的方法
String string = DateToString(from);
/*
//或者使用這兩句
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String string = dateFormat.format(date);*/
return string;
}
/**
* date ---> instant
* @param date
* @return
*/
public static final Instant DateToInstant(Date date) {
Instant instant = date.toInstant();
return instant;
}
/**
* instant ---> date
* @param instant
* @return
*/
public static final Date InstantToDate(Instant instant) {
Date from = Date.from(instant);
return from;
}
/**
* String ---> date
* @param s 2020-03-21 17:23:54
* @return Sat Mar 21 17:23:54 CST 2020
* @throws ParseException
*/
public static final Date StringToDate(String s) throws ParseException {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = dateFormat.parse(s);
return date;
}
/**
* date格式時間 轉換爲字符串
* @param date 時間
* @return
*/
public static final String DateToString(Date date) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String string = dateFormat.format(date);
return string;
}
/**
* 測試主方法
* @param args
*/
public static void main(String args[]) throws ParseException {
String stringtime = "2020-03-21 14:53:42";
Instant instantStringtime = StringToInstant(stringtime);
System.out.println("-----------StringToInstant------------->" + stringtime);
System.out.println("-----------StringToInstant------------->" + instantStringtime);
String s = "2020-03-21 17:23:54";
System.out.println("---------StringToDateToInstant-------->" + s);
Instant instant1 = StringToDateToInstant(s);
System.out.println("---------StringToDateToInstant-------->" + instant1);
//推薦使用這種方式獲得 Instant 時間,獲得當前的國際時間,instant,020-03-21T07:14:42.071Z
Instant instant = Instant.now();
System.out.println("---------InstantToDateToString------------>" + instant);
String instantToString = InstantToDateToString(instant);
System.out.println("---------InstantToDateToString------------>" + instantToString);
Date date = new Date();
System.out.println("-------------DateToInstant---------------->" + date);
Instant instant2 = DateToInstant(date);
System.out.println("-------------DateToInstant---------------->" + instant2);
Instant instant3 = Instant.now();
System.out.println("---------InstantToDate--------->" + instant3);
Date date2 = InstantToDate(instant3);
System.out.println("---------InstantToDate--------->" + date2);
String s1 = "2020-03-21 17:45:55";
System.out.println("-----------StringToDate----------->" + s1);
Date date1 = StringToDate(s1);
System.out.println("-----------StringToDate----------->" + date1);
//獲得 Sat Mar 21 15:12:26 CST 2020 英文字母的時間
Date date3 = new Date();
System.out.println("----------DateToString----------->" + date3);
String sdate = DateToString(date3);
System.out.println("----------DateToString----------->" + sdate);
//儘量避免使用這種方式獲得 Instant 時間,2020-03-21T15:14:42.071 直接獲得本地時間,表示的是 帶T 的本地時間,格式是國際時間,時間不是
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println("---------localDateTime------------>" + localDateTime);
}
}
如果數據庫裏存儲的時間類型是 Instant 類型,
存儲的時候可能會相差8個小時,這個時候,不要手動的進行8小時時差的添加,修改 properties 配置文件
指定當前時區爲 Asia/Shanghai
由於我開發的時候使用的是 Hibernate 對數據庫進行操作 ,配置文件爲
spring.jsp.properties.hibernate.jdbc.time_zone=Asia/Shanghai
-----------StringToInstant------------->2020-03-21 14:53:42 String類型的時間
-----------StringToInstant------------->2020-03-21T06:53:42Z Instant類型的時間
---------StringToDateToInstant-------->2020-03-21 17:23:54
---------StringToDateToInstant-------->2020-03-21T09:23:54Z
---------InstantToDateToString------------>2020-03-21T11:21:19.146Z
---------InstantToDateToString------------>2020-03-21 19:21:19
-------------DateToInstant---------------->Sat Mar 21 19:21:19 CST 2020 Date類型的時間
-------------DateToInstant---------------->2020-03-21T11:21:19.147Z
---------InstantToDate--------->2020-03-21T11:21:19.152Z
---------InstantToDate--------->Sat Mar 21 19:21:19 CST 2020
-----------StringToDate----------->2020-03-21 17:45:55
-----------StringToDate----------->Sat Mar 21 17:45:55 CST 2020
----------DateToString----------->Sat Mar 21 19:21:19 CST 2020
----------DateToString----------->2020-03-21 19:21:19
---------localDateTime------------>2020-03-21T19:21:19.153 不要使用這種時間