1.不变性

新的日期/时间API中,所有的类都是不可变的,这对多线程环境有好处。

比如:LocalDateTime

2.关注点分离

新的API将人可读的日期时间和机器时间(unix timestamp)明确分离,它为日期(Date)、时间(Time)、日期时间(DateTime)、时间戳(unix timestamp)以及时区定义了不同的类。

不同时间分解成了各个类,比如:LocalDate, LocalTime, LocalDateTime, Instant,Year,Month,YearMonth,MonthDay,DayOfWeek等,满足各种不同场景使用需求。

3.清晰

在所有的类中,方法都被明确定义用以完成相同的行为。

举个例子,要拿到当前实例我们可以使用now()方法,在所有的类中都定义了format()和parse()方法,而不是像以前那样专门有一个独立的类。方法明确,清晰,统一,方便好记。

4.实用操作

(相当于很多工具方法,不再需要我们自己封装了):所有新的日期/时间API类都实现了一系列方法用以完成通用的任务,如:加、减、格式化、解析、从日期/时间中提取单独部分,等等。

比如:LocalDateTime,包含非常丰富的实用操作(转换,获取各个字段,修改字段,增加和减少等)。

5.TemporalAdjuster 让你能够用更精细的方式操纵日期

不再局限于一次只能改变它的 一个值,并且你还可按照需求定义自己的日期转换器。比如:将日期调整到下个周日、下个工作日,或者是本月的最后一天。

lastDayOfMonth 创建一个新的日期,它的值为当月的最后一天。

6.对比Jdk7及以前的日期时间类的缺点改进

6.1 Date和Calendar的不方便使用问题

(1)new Date(2019,01,01)实际是3919年2月。因为Date的构造函数 的年份表示的始于1900年的差值。

  LocalDate创建实例:

LocalDate localDate = LocalDate.of(2019, 1, 1);

(2)month是从0开始的。

LocalDate month是从1开始的:

        LocalDate localDate = LocalDate.of(2019, 1, 1);
System.out.println(localDate.getMonthValue());

输出是1

(3)DAY_OF_WEEK 的取值,是从周日(1)开始的。

LocalDate week是从周一(1)开始的:

        LocalDate localDate = LocalDate.of(2019, 1, 1);
System.out.println(localDate.getDayOfWeek());
System.out.println(localDate.getDayOfWeek().getValue());

输出

TUESDAY
2

(4)Date如果不格式化,打印出的日期可读性差。

LocalDate的输出,清晰。

        LocalDate localDate = LocalDate.of(2019, 1, 1);
System.out.println(localDate.getMonthValue());
System.out.println(localDate.toString());

输出:

2019-01-01

(5)日期类并不提供国际化,没有时区支持

java8的时间类都支持了时区操作。

例如:LocalDateTime

         //中国时间,输出时不包含时区
LocalDateTime ldt = LocalDateTime.now(ZoneId.of("Asia/Shanghai"));
System.out.println(ldt);
//意大利罗马时间,输出时包含时区
ZonedDateTime zdt = ZonedDateTime.now(ZoneId.of("Europe/Rome"));
System.out.println(zdt);

输出

2019-12-20T23:17:07.914
2019-12-20T16:17:07.915+01:00[Europe/Rome]

6.2 线程安全问题

(1)Date、Calendar可变性,线程安全问题

java8中所有类都是final修饰的,每次修改都会生成新的副本。

(2)DateFormat和SimpleDateFormat线程安全问题

java8中的DateTimeFormatter也是不可变的,源码:

6.3 java8对日期api进行系统的设计,增加了许多实用方便的操作,几乎不用再使用dateutil额外工具类。

比如,增加一天。

        LocalDate localDate = LocalDate.of(2019, 1, 1);
LocalDate localDate2 = localDate.plusDays(1);
System.out.println("localDate:"+localDate);
System.out.println("localDate2:"+localDate2);

输出:

localDate:2019-01-01
localDate2:2019-01-02

参考:https://blog.csdn.net/wangsun300/article/details/103403490

Java日期时间API系列7-----Jdk8中java.time包中的新的日期时间API类的特点的更多相关文章

  1. 在swt中获取jar包中的文件 uri is not hierarchical

    uri is not hierarchical 学习了:http://blog.csdn.net/zdsdiablo/article/details/1519719 在swt中获取jar包中的文件: ...

  2. API接口自动化之3 同一个war包中多个接口做自动化测试

    同一个war包中多个接口做自动化测试 一个接口用一个测试类,每个测试用例如下,比如下面是4个测试用例,每个详细的测试用例中含有请求入参,返回体校验,以此来判断每条测试用例是否通过 一个war包中,若含 ...

  3. Andriod项目开发实战(1)——如何在Eclipse中的一个包下建新包

    最开始是想将各个类分门别类地存放在不同的包中,所以想在项目源码包中新建几个不同功能的包eg:utils.model.receiver等,最后的结果应该是下图左边这样的:   很明显建立项目后的架构是上 ...

  4. Mac 如何导出ipa文件中Assets.car包中的切图

    在之前 获取 AppStore 中 应用 的 IPA 包文件(Mac OS 13+)中获取到应用的 IPA 包,可以取出应用的部分图片(如 Logo),如果项目工程中把图片添加到 Assets.xca ...

  5. 【转】Eclipse中查看jar包中的源码

    (简单的方式:通过jd-gui来进行反编译,最简单!,参考我的另一篇博文, 地址:http://www.cnblogs.com/gmq-sh/p/4277991.html) Java Decompil ...

  6. JDK中的Atomic包中的类及使用

    引言 Java从JDK1.5开始提供了java.util.concurrent.atomic包,方便程序员在多线程环境下,无锁的进行原子操作.原子变量的底层使用了处理器提供的原子指令,但是不同的CPU ...

  7. Package.json中dependencies依赖包中^符号和~符号前缀的区别

    刚git了webpack的包发现package.json里面dependencies依赖包的版本号前面的符号有两种,一种是~,一种是^,如下图标记: 然后搜了下在stackoverflow上找到一个比 ...

  8. Java8系列 (六) 新的日期和时间API

    概述 在Java8之前, 我们一般都是使用 SimpleDateFormat 来解析和格式化日期时间, 但它是线程不安全的. @Test public void test() { SimpleDate ...

  9. Java8 新的日期和时间API(笔记)

    LocalDate LocalTime Instant duration以及Period 使用LocalDate和LocalTime //2017-03-20 LocalDate date = Loc ...

  10. Redis总结(五)缓存雪崩和缓存穿透等问题 Web API系列(三)统一异常处理 C#总结(一)AutoResetEvent的使用介绍(用AutoResetEvent实现同步) C#总结(二)事件Event 介绍总结 C#总结(三)DataGridView增加全选列 Web API系列(二)接口安全和参数校验 RabbitMQ学习系列(六): RabbitMQ 高可用集群

    Redis总结(五)缓存雪崩和缓存穿透等问题   前面讲过一些redis 缓存的使用和数据持久化.感兴趣的朋友可以看看之前的文章,http://www.cnblogs.com/zhangweizhon ...

随机推荐

  1. 【xAsset框架】HFS 轻量级HTTP Server快速入门指南

    一.引子 最近马三有幸参与开发了一个简易轻量的Unity资源管理框架 xAsset ,xasset 提供了一种使用资源路径的简单的方式来加载资源,简化了Unity项目资源打包,更新,加载,和回收的作业 ...

  2. Googleplaystore数据分析

    本次所用到的数据分析工具:numpy.pandas.matplotlib.seaborn 一.分析目的 假如接下来需要开发一款APP,想了解开发什么类型的APP会更受欢迎,此次分析可以对下一步计划进行 ...

  3. 源生JS实现点击复制功能

    之前在工作中,有位同事问过我一个问题,JS如何实现点击复制功能.给他解决后现在来总结归纳一下,顺便做个笔记. PS:此乃本人第一篇博客(跟着同事大佬学习),涉及知识尚浅,如有任何意见和建议请告知于我. ...

  4. Java题库——Chapter6 一维数组

    1)What is the representation of the third element in an array called a? 1) _______ A)a(3) B) a(2) C) ...

  5. Web前端基础(9):JavaScript(三)

    1. 常用内置对象 所谓内置对象就是ECMAScript提供出来的一些对象,我们知道对象都是有相应的属性和方法. 1.1 数组Array 1.1.1 数组的创建方式 字面量方式创建(推荐大家使用这种方 ...

  6. Winform中封装DevExpress的MarqueeProgressBarComtrol实现弹窗式进度条效果

    场景 在Winform中实现弹窗式进度条 就是新建一个窗体,然后在窗体中加入进度条控件,然后在触发进度条的事件中将加载进度报告给 进度条控件. 注: 博客主页: https://blog.csdn.n ...

  7. HTML5☞canvas

    <canvas>便签用于绘制图像,图表.不过,<canvas> 元素本身并没有绘制能力(它仅仅是图形的容器) - 您必须使用脚本JavaScript来完成实际的绘图任务.既然你 ...

  8. 如何在父级下访问v-slot的值——vuejs

    关于作用域插槽v-slot的用法可以先看看文档 https://cn.vuejs.org/v2/guide/components-slots.html#%E4%BD%9C%E7%94%A8%E5%9F ...

  9. kali安装vmtool后依旧无法拖拽文件,复制粘贴,解决办法

    本文链接:https://blog.csdn.net/Key_book/article/details/80310235命令行下 执行 apt-get install open-vm-tools-de ...

  10. 【转载】Android IntentService使用全面介绍及源码解析

    一 IntentService介绍 IntentService定义的三个基本点:是什么?怎么用?如何work? 官方解释如下: //IntentService定义的三个基本点:是什么?怎么用?如何wo ...