zoukankan      html  css  js  c++  java
  • JAVA8之新的日期和时间API

    旧版API缺陷

      1.设计缺陷 :比如Calendar类的月份是从0开始计算

         2.非线程安全:java.util.Date 是非线程安全的,所有的日期类都是可变的

         3.时区处理麻烦:日期类并不提供国际化,没有时区支持,因此Java引入了java.util.Calendar和java.util.TimeZone类,但他们同样存在上述所有的问题

    新版API

      1.LocalDate,LocalTime

        LocalDate:该类的实例是一个不可变对象,它只提供了简单的日期,并不包含当天的时间信息,也不附带任何与时区相关的信息。可以通过静态方法of(y,m,d)创建一个LocalDate实例,也可以通过now()获取当前日期.

        LocalTime:一天中的时间,比如8:55:13,可以用LocalTime表示。可以使用of重载的工厂方法创建LocalTime实例

        LocalDateTime:是LocalDate和LocalTime的合体,同时表示了日期和时间,但是不带时区信息

        代码示例:

    package Date;
    
    import java.time.LocalDate;
    import java.time.LocalDateTime;
    import java.time.LocalTime;
    import java.time.Month;
    
    public class Test {
        public static void main(String[] args) {
            // 获取当前的日期时间
            LocalDateTime currentTime = LocalDateTime.now();
            System.out.println("当前时间: " + currentTime);
    
            LocalDate date1 = currentTime.toLocalDate();
            System.out.println("date1: " + date1);
    
            Month month = currentTime.getMonth();
            int day = currentTime.getDayOfMonth();
            int seconds = currentTime.getSecond();
    
            System.out.println("月: " + month + ", 日: " + day + ", 秒: " + seconds);
    
            LocalDateTime date2 = currentTime.withDayOfMonth(10).withYear(2012);
            System.out.println("date2: " + date2);
    
            // 12 december 2014
            LocalDate date3 = LocalDate.of(2014, Month.DECEMBER, 12);
            System.out.println("date3: " + date3);
    
            // 22 小时 15 分钟
            LocalTime date4 = LocalTime.of(22, 15);
            System.out.println("date4: " + date4);
    
            // 解析字符串
            LocalTime date5 = LocalTime.parse("20:15:30");
            System.out.println("date5: " + date5);
        }
    }
    View Code

       2.操纵,解析和格式化日期

        所有的日期时间对象均实现了Temporal接口,其静态或实例方法会创建一个对象的副本,而不会修改原来的对象。常见的方法如下:

    方法名 是否是静态方法 描述
    from 根据传入的Temporal对象创建对象实例
    now 根据系统时钟创建Temporal对象
    of 由Temporal对象的某个布防创建该对象的实例
    pares 由字符串创建Temporal对象的实例
    atOffset 将Temporal对象和某个时区偏移相结合
    atZone 将Temporal对象和某个时区相结合
    format 使用格式器将Temporal对象转换为字符串
    get 读取Temporal对象的某一部分的值
    minus 通过将当前Temporal对象的值减去一定的时长创建该副本
    plus 通过将当前Temporal对象的值加上一定的时长创建该副本
    with 以该Temporal对象为模板,对某些状态进行修改创建该对象的副本 

        3.使用TemporalAdjuster.

        可以使用重载版本的with方法,向其传递一个提供了更多定制化选择的TemporalAdjuster对象。

    package Date;
    
    import java.time.DayOfWeek;
    import java.time.LocalDateTime;
    import java.time.temporal.TemporalAdjusters;
    
    public class TemporalAdjustersTest {
        public static void main(String[] args) {
            // 当前时间: 2020-02-21T16:32:01.492
            LocalDateTime currentTime = LocalDateTime.now();
            System.out.println("当前时间: " + currentTime);
    
            //nextDay: 2020-02-23T16:32:01.492   创建一个新的日期,并将其值设定为日期调整后,第一个符合指定星期几要求的日期。如果该日期已符合要求,直接返回该对象
            LocalDateTime nextDay = currentTime.with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY));
            System.out.println("nextDay: " + nextDay);
            
            //firstDay: 2020-02-01T16:37:38.789 创建一个日期,它的值为当月的第一天
            LocalDateTime firstDay = currentTime.with(TemporalAdjusters.firstDayOfMonth());
            System.out.println("firstDay: " + firstDay);
        }
    }

      

        

        

        

        

      

      

  • 相关阅读:
    94. Binary Tree Inorder Traversal
    101. Symmetric Tree
    38. Count and Say
    28. Implement strStr()
    实训团队心得(1)
    探索性测试入门
    LC.278. First Bad Version
    Search in Unknown Sized Sorted Array
    LC.88. Merge Sorted Array
    LC.283.Move Zeroes
  • 原文地址:https://www.cnblogs.com/ryjJava/p/12341941.html
Copyright © 2011-2022 走看看