string-date-instant 時間類型轉換

時間類型轉換。

############################################################

//儘量避免使用這種方式獲得 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     不要使用這種時間
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章