zoukankan      html  css  js  c++  java
  • JDK8中新日期时间API

    它们面临的问题是:
    可变性:像日期和时间这样的类应该是不可变的。
    偏移性:Date中的年份是从1900开始的,而月份都从0开始。
    格式化:格式化只对Date有用,Calendar则不行。
    此外,它们也不是线程安全的;不能处理闰秒等。

     

     

     LocalDate、LocalTime、LocalDateTime 类是其中较重要的几个类,它们的实例
    是不可变的对象,分别表示使用 ISO-8601日历系统的日期、时间、日期和时间。
    它们提供了简单的本地日期或时间,并不包含当前的时间信息,也不包含与时区
    相关的信息。
    LocalDate代表IOS格式(yyyy-MM-dd)的日期,可以存储 生日、纪念日等日期。
    LocalTime表示一个时间,而不是日期。
    LocalDateTime是用来表示日期和时间的,这是一个最常用的类之一。

    /*
    LocalDate、LocalTime、LocalDateTime 的使用
    说明:
    1.LocalDateTime相较于LocalDate、LocalTime,使用频率要高
    2.类似于Calendar
    */
    @Test
        public void test1(){
            //now():获取当前的日期、时间、日期+时间
            LocalDate localDate = LocalDate.now();
            LocalTime localTime = LocalTime.now();
            LocalDateTime localDateTime = LocalDateTime.now();
    
            System.out.println(localDate);
            System.out.println(localTime);
            System.out.println(localDateTime);
    
            //of():设置指定的年、月、日、时、分、秒。没有偏移量
            LocalDateTime localDateTime1 = LocalDateTime.of(2020, 10, 6, 13, 23, 43);
            System.out.println(localDateTime1);
    
    
            //getXxx():获取相关的属性
            System.out.println(localDateTime.getDayOfMonth());
            System.out.println(localDateTime.getDayOfWeek());
            System.out.println(localDateTime.getMonth());
            System.out.println(localDateTime.getMonthValue());
            System.out.println(localDateTime.getMinute());
    
            //体现不可变性
            //withXxx():设置相关的属性
            LocalDate localDate1 = localDate.withDayOfMonth(22);
            System.out.println(localDate);
            System.out.println(localDate1);
    
            LocalDateTime localDateTime2 = localDateTime.withHour(4);
            System.out.println(localDateTime);
            System.out.println(localDateTime2);
    
            //不可变性
            LocalDateTime localDateTime3 = localDateTime.plusMonths(3);
            System.out.println(localDateTime);
            System.out.println(localDateTime3);
    
            LocalDateTime localDateTime4 = localDateTime.minusDays(6);
            System.out.println(localDateTime);
            System.out.println(localDateTime4);
        }

     

     
    
    

     

    /*
    Instant的使用
    类似于 java.util.Date类

    */
     @Test
        public void test2(){
            //now():获取本初子午线对应的标准时间
            Instant instant = Instant.now();
            System.out.println(instant);//2021-02-18T07:29:41.719Z
    
            //添加时间的偏移量
            OffsetDateTime offsetDateTime = instant.atOffset(ZoneOffset.ofHours(8));
            System.out.println(offsetDateTime);//2021-02-18T15:32:50.611+08:00
    
            //toEpochMilli():获取自1970年1月1日0时0分0秒(UTC)开始的毫秒数  ---> Date类的getTime()
            long milli = instant.toEpochMilli();//获取特定时间地点的毫秒数时间戳
            System.out.println(milli);
    
            //ofEpochMilli():通过给定的毫秒数,获取Instant实例  -->Date(long millis)
            Instant instant1 = Instant.ofEpochMilli(1550475314878L);//instant of设置指定的毫秒数
            System.out.println(instant1);
        }

     

    /*
    DateTimeFormatter:格式化或解析日期、时间
    类似于SimpleDateFormat

    */
    
    
    @Test
        public void test3(){
    //        方式一:预定义的标准格式。如:ISO_LOCAL_DATE_TIME;ISO_LOCAL_DATE;ISO_LOCAL_TIME
            DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
            //格式化:日期-->字符串
            LocalDateTime localDateTime = LocalDateTime.now();
            String str1 = formatter.format(localDateTime);
            System.out.println(localDateTime);
            System.out.println(str1);//2021-02-18T15:42:18.797
    
            //解析:字符串 -->日期
            TemporalAccessor parse = formatter.parse("2021-02-18T15:42:18.797");
            System.out.println(parse);
    
    //        方式二:
    //        本地化相关的格式。如:ofLocalizedDateTime()
    //        FormatStyle.LONG / FormatStyle.MEDIUM / FormatStyle.SHORT :适用于LocalDateTime
            DateTimeFormatter formatter1 = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG);
            //格式化
            String str2 = formatter1.format(localDateTime);
            System.out.println(str2);//2021年2月18日 下午03时47分16秒
    
    
    //      本地化相关的格式。如:ofLocalizedDate()
    //      FormatStyle.FULL / FormatStyle.LONG / FormatStyle.MEDIUM / FormatStyle.SHORT : 适用于LocalDate
            DateTimeFormatter formatter2 = DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM);
            //格式化
            String str3 = formatter2.format(LocalDate.now());
            System.out.println(str3);//2021-2-18
    
    
    //       重点: 方式三:自定义的格式。如:ofPattern(“yyyy-MM-dd hh:mm:ss”)
            DateTimeFormatter formatter3 = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");
            //格式化
            String str4 = formatter3.format(LocalDateTime.now());
            System.out.println(str4);//2021-02-18 03:52:09
    
            //解析
            TemporalAccessor accessor = formatter3.parse("2021-02-18 03:52:09");
            System.out.println(accessor);
    
        }
    
    

     

     

     
    
    
    不积跬步,无以至千里;不积小流,无以成江海。
  • 相关阅读:
    应用开发框架之——业务规则脚本化
    tms脚本演示代码之一
    根据.DFM文件动态生成窗体以及在之前先必须注册窗体中使用到的类
    界面/业务规则脚本化
    delphi 脚本引擎比较
    html5 datalist 选中option选项后的触发事件
    Laravel 5.6 模型关联 user 表后查询 user 表数据只能获取第一条数据,不知道怎么获取第二条...
    小技巧两个感叹号(两个!)连用
    Bootstrap 字体图标(Glyphicons)
    使用withCount后再使用select设置查询的字段。就找不到withCount的数据了
  • 原文地址:https://www.cnblogs.com/CCTVCHCH/p/14669733.html
Copyright © 2011-2022 走看看