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);
        }
    }

      

        

        

        

        

      

      

  • 相关阅读:
    Html
    git和github简易教程
    Java基础
    如何学习一门语言
    leetcode题解(持续更新)
    浅谈安全威胁+引子
    内网渗透基础
    Java运算符
    Java修饰符
    Java变量类型
  • 原文地址:https://www.cnblogs.com/ryjJava/p/12341941.html
Copyright © 2011-2022 走看看