Java8 Time API與老Date之間的轉換


    前面我已經總結了Java8 Time API常用的一些方法、封裝的工具類,可是最近需要對一個比較老的項目進行重構,大致看了一下使用的Jdk還是7而且里面的時間工具類還是使用的Date和Calendar。既然是項目重構,我的第一想法是Jdk版本必須得升一升,和同事商量后還是決定使用Java8(本人比較看好Java 9中的HTTP/2,奈何9版本廣受詬病,而10中局部變量類型推斷對於習慣於強類型定義的Javaer還是一時半會難以接收,最終還是選擇了Java8),另外Spring項目也該換成Spring cloud微服務項目了吧(聽說最近Spring cloud alibaba大火,有空去研究研究.)。呃,有點跑遠了,還是回到我們主題,來介紹一下Date如何轉換成Java8 Time API吧。

  在Java官方社區里面了解到,Time API提供了方法將Date轉換為LocalDate,不過並非直接轉換,而是通過ZonedDateTime。

  下面我先來詳細的介紹Date轉換成LocalDate的方法

1)將java.util.Date轉換為ZonedDateTime。
2)使用它的toLocalDate()方法從ZonedDateTime獲取LocalDate。

  代碼示例

public static void main(String[] args) {
        Date date = new Date();
        Instant instant = date.toInstant();
        ZoneId zoneId = ZoneId.systemDefault();

        // atZone()方法返回在指定時區從此Instant生成的ZonedDateTime。
        LocalDate localDate = instant.atZone(zoneId).toLocalDate();
        System.out.println("Date = " + date);
        System.out.println("LocalDate = " + localDate);
}
----------------------
Date = Fri Jun 16 15:29:05 CST 2017
LocalDate = 2017-06-16

  LocalDate轉換為Date的方法

1)使用ZonedDateTime將LocalDate轉換為Instant。
2)使用from()方法從Instant對象獲取Date的實例

  代碼示例

public static void main(String[] args) {
        ZoneId zoneId = ZoneId.systemDefault();
        LocalDate localDate = LocalDate.now();
        ZonedDateTime zdt = localDate.atStartOfDay(zoneId);

        Date date = Date.from(zdt.toInstant());

        System.out.println("LocalDate = " + localDate);
        System.out.println("Date = " + date);

 }
----------------------
LocalDate = 2017-06-16
Date = Fri Jun 16 00:00:00 CST 2017

 

ps:最后補充一個能很好展示新舊API轉換的工具類

 /**
     * 獲取本周開始日期
     * time Date格式
     *
     * @return LocalDate格式
     */
    public static LocalDate getFirstDayOfWeek(Date time) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); //設置時間格式
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd");//設置時間格式
        Calendar cal = Calendar.getInstance();
        cal.setTime(time);
        int dayWeek = cal.get(Calendar.DAY_OF_WEEK);//獲得當前日期是一個星期的第幾天
        if (1 == dayWeek) {
            cal.add(Calendar.DAY_OF_MONTH, -1);
        }
        cal.setFirstDayOfWeek(Calendar.MONDAY);
        int day = cal.get(Calendar.DAY_OF_WEEK);//獲得當前日期是一個星期的第幾天
        cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - day);//根據日歷的規則,給當前日期減去星期幾與一個星期第一天的差值
        LocalDate date = LocalDate.parse(sdf.format(cal.getTime()),dtf);
        return date;
    }

 

 

  


免責聲明!

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



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