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了。

原文地址:https://www.cnblogs.com/tu-emily/p/12017234.html