時間戳和LocalDateTime和Date互轉和格式化


一 前言

續上篇java8在日常開發中使用LocalDate和LocalTimehttps://blog.csdn.net/youku1327/article/details/102771936】中已經能夠熟練的操作javaSE8的時間基本操作;本篇文章將能力再次提升一個水平,能夠解決大多數開發場景下的時間互相轉換的問題;如果有選擇困難症就別看這篇文章了;隨手點贊謝謝;

二 時間戳與LocalDateTime互轉

2.1 LocalDateTime 轉 時間戳

方式一

這邊值得一提的是在中國的時區偏移是8小時,本次示例轉的時間戳是秒級別,得到的值是一個long值;知識追尋者這邊是當前時間,故讀者得到的結果與知識追尋者得到的結果不一致;讀者可以使用站長工具進行測試校驗

https://unixtime.51240.com/

    @Test
    public void localTimeTest1(){
        // 獲得當前時間
        LocalDateTime localDateTime = LocalDateTime.now();
        // 將當前時間轉為時間戳
        long second = localDateTime.toEpochSecond(ZoneOffset.ofHours(8));
        // 1580706475
        System.out.println(second);

    }

方式二

此方法執行的結果與之前一致,也是秒級別

    @Test
    public void localTimeTest2(){
        // 獲得當前時間
        LocalDateTime localDateTime = LocalDateTime.now();
        // 將當前時間轉為時間戳
        long second = localDateTime.toInstant(ZoneOffset.ofHours(8)).getEpochSecond();
        // 1580707001
        System.out.println(second);

    }

方式三

此方式轉的將是毫秒級別,直接用於站長工具是測試不出來,讀者應該將其除1000取商獲得正確的秒級時間戳;

    @Test
    public void localTimeTest3(){
        // 獲得當前時間
        LocalDateTime localDateTime = LocalDateTime.now();
        // 將當前時間轉為時間戳
        long milliseconds = 				    	     localDateTime.toInstant(ZoneOffset.ofHours(8)).toEpochMilli();
        // 1580707268
        System.out.println(milliseconds/1000);
        
    }

2.2 時間戳 轉LocalDateTime

以下幾種獲取的LocalDateTime方式按讀者需求進行獲取,不同的精確值,將獲取不同的結果;

方式一

先獲取時間戳為秒級別,然后通過轉換為LocalDateTime

    @Test
    public void localTimeTest4(){
        //獲得時間戳
        long second = LocalDateTime.now().toInstant(ZoneOffset.of("+8")).getEpochSecond();
        // 將時間戳轉為當前時間
        LocalDateTime localDateTime = LocalDateTime.ofEpochSecond(second, 0, ZoneOffset.ofHours(8));
        // 2020-02-03T13:30:44
        System.out.println(localDateTime);

    }

方式二

本次獲取的時間搓將是毫秒級別故要除以1000

    public void localTimeTest5(){
        //獲得時間戳
        long milliseconds = LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli();
        // 將時間戳轉為當前時間
        LocalDateTime localDateTime = LocalDateTime.ofEpochSecond(milliseconds/1000, 0, ZoneOffset.ofHours(8));
        // 2020-02-03T13:35:53
        System.out.println(localDateTime);

    }

方式三

本方式精確值是毫秒級別,故得到的結果會存在三位小數點;

    @Test
    public void localTimeTest6(){
        //獲得時間戳
        long milliseconds = LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli();
        // 將時間戳轉為當前時間
        LocalDateTime localDateTime = Instant.ofEpochMilli(milliseconds).atZone(ZoneOffset.ofHours(8)).toLocalDateTime();
        // 2020-02-03T13:38:35.799
        System.out.println(localDateTime);

    }

三 時間戳與LocalDate互轉

學會時間戳與LocalDate互轉,同理就可以推出時間戳與LocalTime 互轉,不過知識追尋者相信幾乎沒人會用到這個,故這邊就不做示例;

3.1 時間戳轉LocalDate

方式一

注意這邊是毫秒級的時間戳;

  @Test
    public void localDateTest1(){
        //獲得時間戳
        long milliseconds = LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli();
        // 將時間戳轉為當前時間
        LocalDate localDate = Instant.ofEpochMilli(milliseconds).atZone(ZoneOffset.ofHours(8)).toLocalDate();
        // 2020-02-03
        System.out.println(localDate);

    }

方式二

注意這邊是秒級時間戳

    @Test
    public void localDateTest2(){
        //獲得時間戳
        long seconds = LocalDateTime.now().toInstant(ZoneOffset.of("+8")).getEpochSecond();
        // 將時間戳轉為當前時間
        LocalDate localDate = Instant.ofEpochSecond(seconds).atZone(ZoneOffset.ofHours(8)).toLocalDate();
        // 2020-02-03
        System.out.println(localDate);

    }

3.2 LocalDate 轉 時間戳

方式一

注意妙計時間戳

    @Test
    public void localDateTest3(){
        LocalDate localDate = LocalDate.now();
        //獲得時間戳
        long seconds = localDate.atStartOfDay(ZoneOffset.ofHours(8)).toInstant().getEpochSecond();
        // 1580659200
        System.out.println(seconds);

    }

方式二

注意毫秒級時間戳

    @Test
    public void localDateTest4(){
        LocalDate localDate = LocalDate.now();
        //獲得時間戳
        long seconds = localDate.atStartOfDay(ZoneOffset.ofHours(8)).toInstant().toEpochMilli();
        // 1580659200000
        System.out.println(seconds);

    }

四 LocalDateTime與Date互轉

4.1 Date轉LocalDateTime

方式一

得出結果是有小數點,毫秒級精確

    @Test
    public void DateTest1(){
        // 創建時間
        Date date = new Date();
        // 將時間轉為 LocalDateTime
        LocalDateTime localDateTime = date.toInstant().atOffset(ZoneOffset.ofHours(8)).toLocalDateTime();
        // 2020-02-03T14:07:49.833
        System.out.println(localDateTime);

    }

方式二

秒級精確;

    @Test
    public void DateTest2(){
        // 創建時間
        Date date = new Date();
        // 將時間轉為 秒級時間戳
        long second = date.toInstant().atOffset(ZoneOffset.ofHours(8)).toEpochSecond();
        LocalDateTime localDateTime = LocalDateTime.ofEpochSecond(second, 0, ZoneOffset.ofHours(8));
        // 2020-02-03T14:11:39
        System.out.println(localDateTime);

    }

4.2 LocalDateTime 轉 Date

方式一

秒級

    @Test
    public void DateTest3(){
        //當前時間
        LocalDateTime localDateTime = LocalDateTime.now();
        // 獲得 Instant
        Instant instant = Instant.ofEpochSecond(localDateTime.toEpochSecond(ZoneOffset.ofHours(8)));
        // 獲得 Date
        Date date = Date.from(instant);
        // Mon Feb 03 14:16:27 CST 2020
        System.out.println(date);

    }

方式二

    @Test
    public void DateTest4(){
        //當前時間
        LocalDateTime localDateTime = LocalDateTime.now();
        // 獲得 Instant
        Instant instant = localDateTime.atZone(ZoneOffset.ofHours(8)).toInstant();
        // 獲得 Date
        Date date = Date.from(instant);
        // Mon Feb 03 14:20:32 CST 2020
        System.out.println(date);

    }

五 LocalDate與Date互轉

5.1 LocalDate 轉 Date

    @Test
    public void DateTest5(){
        //當前時間
        LocalDate localDate = LocalDate.now();
        // 獲得 Instant
        Instant instant = localDate.atStartOfDay(ZoneOffset.ofHours(8)).toInstant();
        // 獲得 Date
        Date date = Date.from(instant);
        // Mon Feb 03 00:00:00 CST 2020
        System.out.println(date);

    }

5.2 Date 轉LocalDate

    @Test
    public void DateTest6(){
        // 獲得 date
        Date date = new Date();
        // 獲得  LocalDate
        LocalDate localDate = date.toInstant().atOffset(ZoneOffset.ofHours(8)).toLocalDate();
        // 2020-02-03
        System.out.println(localDate);
    }

六 LocalDateTime格式化

最后再說下格式化;知識追尋者這邊就不提 LocalDateTime, LocalDate , LocalTime 互轉問題,原因是前言那篇文章已經提到過;

6.1 LocalDateTime 轉字符串

   @Test
    public void format1(){
        // 獲得 localDateTime
        LocalDateTime localDateTime = LocalDateTime.now();
        // 指定模式
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH/mm/ss");
        // 將 LocalDateTime 格式化為字符串
        String format = localDateTime.format(dateTimeFormatter);
        // 2020/02/03 14/38/54
        System.out.println(format);
    }

6.2 字符串 轉LocalDateTime

    @Test
    public void format2(){
        String time = "2020/02/03 14/38/54";
        // 指定模式
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH/mm/ss");
        // 將字符串格式化為 LocalDateTime
        LocalDateTime localDateTime = LocalDateTime.parse(time, dateTimeFormatter);
        // 2020-02-03T14:38:54
        System.out.println(localDateTime);
    }

javaSE8教程


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM