zoukankan      html  css  js  c++  java
  • 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了。

  • 相关阅读:
    Golang的select多路复用以及channel使用实践
    golang-goroutine和channel
    golang类型转换小总结
    golang之终端操作,文件操作
    golang之结构体和方法
    golang基础之三-字符串,时间,流程控制,函数
    Linux Keepliaved安装
    Git打标签、还原到具体标签版本代码
    Git复制已有分支到新分支开发
    记一次内存分析
  • 原文地址:https://www.cnblogs.com/tu-emily/p/12017234.html
Copyright © 2011-2022 走看看