java8新特性——新日期和时间API

一.LocalDate,LocalTime,LocalDateTime

LocalDate,LocalTime,LocalDateTime类的实例是不可改变的,分别表示使用ISO-8601日历系统的日期,时间,日期和时间。他们提供了简单的日期或时间,并不包含当前的时间信息。也不包含与地区相关的信息。

        //1.当前时间对象
        LocalDateTime ldt = LocalDateTime.now();
        System.out.println(ldt);

        //2.自定义时间对象
        LocalDateTime ldt2 = LocalDateTime.of(2020,4,13,8,8,50);
        System.out.println(ldt2);

        //3.加时间
        LocalDateTime localDateTime = ldt.plusDays(2);

        //4.减时间
        ldt.minusDays(1);

        //5.获取时间
        System.out.println(localDateTime.getDayOfMonth());

  

二.Instant 时间戳 (以Unix元年1970.1.1 0:0:0)到某个时间之间的毫秒值

        //1.获取默认UTC时区
        Instant now = Instant.now();

        //2.获取8个时区的时间
        OffsetDateTime odt = now.atOffset(ZoneOffset.ofHours(8));

        //3.取得时间戳
        long l = now.toEpochMilli();

        //4.向Unix元年之后1秒
        Instant instant = Instant.ofEpochSecond(1);

三.Duration  Period

     /**
         * Duration : 计算两个‘时间‘ 之间的间隔
         * Period : 计算两个‘日期‘ 之间的间隔
         */
        Instant now1 = Instant.now();
        Instant onehour = now.plusSeconds(60 * 60);
        Duration between = Duration.between(now1, onehour);
        System.out.println(between.toSeconds());

        LocalDate ld01 = LocalDate.now();
        LocalDate ld02 = LocalDate.of(2020, 4, 15);
        Period between1 = Period.between(ld01, ld02);
        System.out.println(between1.getDays());

 

四.TemporalAdjuster 时间校正器

TemporalAdjuster:时间矫正器。有时我们可能需要获取例如:将日期调整到"下个周日"等操作。

TemporalAdjusters:该类通过静态方法提供了大量的常用TemporalAdjuster的实现。

        LocalDateTime now = LocalDateTime.now();
        //获取这个月的第一天
        LocalDateTime with = now.with(TemporalAdjusters.firstDayOfMonth());

        //获取这个月第一个星期二
        LocalDateTime with1 = now.with(TemporalAdjusters.dayOfWeekInMonth(1, DayOfWeek.TUESDAY));

        //自定义:下一个工作日
        LocalDateTime nextWorkDay = now.with((x) -> {
            //传递来的参数
            LocalDateTime ldt = (LocalDateTime) x;
            //如果传来的周五,那么下个工作日就是三天后
            if (ldt.equals(DayOfWeek.FRIDAY)) {
                return ldt.plusDays(3);
            } else if (ldt.equals(DayOfWeek.SATURDAY)) {
                return ldt.plusDays(2);
            } else {
                return ldt.plusDays(1);
            }
        });

  

五.DateTimeFormatter :格式化日期/时间

        //定义格式化格式
        DateTimeFormatter dft = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
        LocalDateTime now = LocalDateTime.now();
        String format = now.format(dft);

        //自定义格式化格式
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        String format1 = now.format(dateTimeFormatter);

        //字符串格式转换为日期 如果只用年月日就只能转换为LocalDate
        LocalDate ld = LocalDate.parse(format1,dateTimeFormatter);
        System.out.println(ld.getDayOfMonth());

  

六.ZonedDate,ZonedTime,ZonedDateTime

其中每个时区都对应着ID,地区ID都为 " {区域}/{城市}  "的格式

ZoneId :该类中包含了所有的时区信息

getAvailableZoneIds() :可以获取所有时区的时区信息

of(id) :用指定的时区信息获取ZoneId对象

     //1.查看支持的所有时区信息
        Set<String> set = ZoneId.getAvailableZoneIds();
        set.forEach(System.out::println);

        //2.取得指定时区的时间 2020-04-14T00:54:04.797825100
        LocalDateTime now = LocalDateTime.now(ZoneId.of("Asia/Tokyo"));
        System.out.println(now);

        //3.带时区信息的时间 2020-04-13T23:54:04.800817600+09:00[Asia/Tokyo]
        LocalDateTime now1 = LocalDateTime.now(ZoneId.of("Asia/Tokyo"));
        ZonedDateTime zonedDateTime = now1.atZone(ZoneId.of("Asia/Tokyo"));
        System.out.println(zonedDateTime);

  

原文地址:https://www.cnblogs.com/licha233/p/12695141.html

时间: 2024-10-07 14:13:09

java8新特性——新日期和时间API的相关文章

java8新特性之 日期和时间

在Java 8以前,日期和时间处理一直被广大java程序员抱怨太难用,java.util和java.sql中,都包含Date类,如果要进行时间格式化,还需要java.text.DateFormat类处理.同时java.util.Date中既包含了日期,又包含了时间,所以java8新的日期和时间库,很好的解决了以前日期和时间类的很多弊端.并且也借鉴了第三方日期库joda很多的优点. java.time包下主要包含下面几个主要的类: Instant:时间戳 Duration:持续时间,时间差 Loc

Java8中新增的日期和时间API

1.计算时间间隔 Java8之前,我们想要确定一个方法的运行时间长度,可以这样: long start = System.currentTimeMillis(); doSomething(); long end = System.currentTimeMillis(); System.out.println(end-start); Java8中,可以这样 Instant start = Instant.now(); doSomething(); Instant end = Instant.now

Java 8 新特性:Java 类库的新特性之日期时间API (Date/Time API ) ——诺诺&quot;涂鸦&quot;记忆

----------   诺诺学习技术交流博客.期待与您交流!    ---------- 详情请查看:http://blog.csdn.net/sun_promise  日期时间API (Date/Time API ) 1.Java8之前java.util.Date和Calendar类的弊端 1)最开始的时候,Date既要承载日期信息,又要做日期之间的转换,还要做不同日期格式的显示,职责较繁杂(不遵守单一职责). 后来从JDK 1.1 开始,这三项职责分开了: 使用Calendar类实现日期和

java 8中新的日期和时间API

java 8中新的日期和时间API 使用LocalDate和LocalTime LocalDate的实例是一个不可变对象,它只提供了简单的日期,并不含当天的时间信息.另外,它也不附带任何与时区相关的信息 LocalDate实例提供了多种方法来读取常用的值,比如年份,月份,星期几等 LocalDate date = LocalDate.of(2014,3,18); int year = date.getYear(); Month month = date.getMonth(); int day =

Java 8的日期和时间API

本节继续探讨Java 8的新特性,主要是介绍Java 8对日期和时间API的增强,关于日期和时间,我们在之前已经介绍过两节了,32节介绍了Java 1.8以前的日期和时间API,主要的类是Date和Calendar,由于它的设计有一些不足,业界广泛使用的是一个第三方的类库Joda-Time,关于Joda-time,我们在33节进行了介绍.Java 1.8学习了Joda-time,引入了一套新的API,位于包java.time下,本节,我们就来简要介绍这套新的API. 我们先从日期和时间的表示开始

计算机程序的思维逻辑 (95) - Java 8的日期和时间API

?本节继续探讨Java 8的新特性,主要是介绍Java 8对日期和时间API的增强,关于日期和时间,我们在之前已经介绍过两节了,32节介绍了Java 1.8以前的日期和时间API,主要的类是Date和Calendar,由于它的设计有一些不足,业界广泛使用的是一个第三方的类库Joda-Time,关于Joda-time,我们在33节进行了介绍.Java 1.8学习了Joda-time,引入了一套新的API,位于包java.time下,本节,我们就来简要介绍这套新的API. 我们先从日期和时间的表示开

JDK8版本之日期和时间API详解

伴随lambda表达式.streams以及一系列小优化,Java 8 推出了全新的日期时间API,在教程中我们将通过一些简单的实例来学习如何使用新API.Java处理日期.日历和时间的方式一直为社区所诟病,将 java.util.Date设定为可变类型,以及SimpleDateFormat的非线程安全使其应用非常受限.Java也意识到需要一个更好的 API来满足社区中已经习惯了使用JodaTime API的人们.全新API的众多好处之一就是,明确了日期时间概念,例如:瞬时(instant). 长

Atitit.mysql&#160;5.0&#160;5.5&#160;&#160;5.6&#160;5.7&#160;&#160;新特性&#160;新功能

Atitit.mysql 5.0 5.5  5.6 5.7  新特性 新功能 1. MySQL  5.6    5 大新特性1 1.1. 优化器的改进1 1.2. InnoDB 改进1 1.3. 使用 memcached API 直接访问 NoSQL2 1.4. 更好的复制2 1.5. Performance Schema2 2. MySQL 5.7.62 2.1. 内建中文全文索引2 2.2. 多主复制2 2.3. other2 3. 参考2 1. MySQL  5.6    5 大新特性 M

Atitit.&#160;visual&#160;studio&#160;vs2003&#160;vs2005&#160;vs2008&#160;&#160;VS2010&#160;vs2012&#160;vs2015新特性&#160;新功能.doc

Atitit. visual studio vs2003 vs2005 vs2008  VS2010 vs2012 vs2015新特性 新功能.doc 1.1. Visual Studio2 1.2. Visual Studio 972 1.3. Visual Studio 6.02 1.4. Vs20022 1.5. Vs20032 1.6. Vs20052 1.6.1. 数据访问  Web开发     Windows Forms 方面的开发特性增强2 1.6.2. Refactoring 2

Atitit.mysql 5.0 5.5 &#160;5.6 5.7 &#160;新特性 新功能

Atitit.mysql 5.0 5.5  5.6 5.7  新特性 新功能 1. MySQL  5.6    5 大新特性1 1.1. 优化器的改进1 1.2. InnoDB 改进1 1.3. 使用 memcached API 直接访问 NoSQL2 1.4. 更好的复制2 1.5. Performance Schema2 2. MySQL 5.7.62 2.1. 内建中文全文索引2 2.2. 多主复制2 2.3. other2 3. 参考2 1. MySQL  5.6    5 大新特性 M