java8中 日期/時間 的使用


  java8之前的時間類都是線程不安全的,且操作相對來說比較復雜。而java8中的時間類都是線程安全的。
  而它是如何實現線程安全的呢?以LocalDateTime為例。
  看LocalDateTime源碼,我們可以看到這個類的實現描述:This class is immutable and thread-safe   該類是不可變且線程安全的。

LocalDateTime 是final 修飾的,其成員變量也都是final修飾的,LocalDateTime 每次調用方法都會返回一個新的實例。

      private static LocalDateTime now = LocalDateTime.now();    
        private static Date today = new Date();
        public static void main(String[] args) {
            System.out.println(now.toString());
            now.minusDays(5);
            System.out.println(now.toString());

            System.out.println("------------------------");

            System.out.println(today.toString());
            today.setTime(5);
            System.out.println(today.toString());
        }        

  可以發現now是沒有被改變的,而today已經變了。

 

下面總結下一些常見的對時間的操作(java8)

1.獲取當前日期:

Date date = Date.from(LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant())
String date = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))

2.獲取幾年,幾個月,幾周....前或者后的日期:

Date startTime = Date.from(LocalDateTime.now().minusMonths(5).atZone(ZoneId.systemDefault()).toInstant());
  minusYears, minusMonths, minusWeeks...

3.獲取某天的起止時間:

String beginDate = LocalDateTime.of(LocalDate.now(), LocalTime.MIN).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
String endDate = LocalDateTime.of(LocalDate.now(), LocalTime.MAX).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));

   就不用在后面拼接00:00:00或者23:59:59了。


免責聲明!

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



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