Java日期时间API系列7-----Jdk8中java.time包中的新的日期时间API类的特点
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类的特点的更多相关文章
- 在swt中获取jar包中的文件 uri is not hierarchical
uri is not hierarchical 学习了:http://blog.csdn.net/zdsdiablo/article/details/1519719 在swt中获取jar包中的文件: ...
- API接口自动化之3 同一个war包中多个接口做自动化测试
同一个war包中多个接口做自动化测试 一个接口用一个测试类,每个测试用例如下,比如下面是4个测试用例,每个详细的测试用例中含有请求入参,返回体校验,以此来判断每条测试用例是否通过 一个war包中,若含 ...
- Andriod项目开发实战(1)——如何在Eclipse中的一个包下建新包
最开始是想将各个类分门别类地存放在不同的包中,所以想在项目源码包中新建几个不同功能的包eg:utils.model.receiver等,最后的结果应该是下图左边这样的: 很明显建立项目后的架构是上 ...
- Mac 如何导出ipa文件中Assets.car包中的切图
在之前 获取 AppStore 中 应用 的 IPA 包文件(Mac OS 13+)中获取到应用的 IPA 包,可以取出应用的部分图片(如 Logo),如果项目工程中把图片添加到 Assets.xca ...
- 【转】Eclipse中查看jar包中的源码
(简单的方式:通过jd-gui来进行反编译,最简单!,参考我的另一篇博文, 地址:http://www.cnblogs.com/gmq-sh/p/4277991.html) Java Decompil ...
- JDK中的Atomic包中的类及使用
引言 Java从JDK1.5开始提供了java.util.concurrent.atomic包,方便程序员在多线程环境下,无锁的进行原子操作.原子变量的底层使用了处理器提供的原子指令,但是不同的CPU ...
- Package.json中dependencies依赖包中^符号和~符号前缀的区别
刚git了webpack的包发现package.json里面dependencies依赖包的版本号前面的符号有两种,一种是~,一种是^,如下图标记: 然后搜了下在stackoverflow上找到一个比 ...
- Java8系列 (六) 新的日期和时间API
概述 在Java8之前, 我们一般都是使用 SimpleDateFormat 来解析和格式化日期时间, 但它是线程不安全的. @Test public void test() { SimpleDate ...
- Java8 新的日期和时间API(笔记)
LocalDate LocalTime Instant duration以及Period 使用LocalDate和LocalTime //2017-03-20 LocalDate date = Loc ...
- Redis总结(五)缓存雪崩和缓存穿透等问题 Web API系列(三)统一异常处理 C#总结(一)AutoResetEvent的使用介绍(用AutoResetEvent实现同步) C#总结(二)事件Event 介绍总结 C#总结(三)DataGridView增加全选列 Web API系列(二)接口安全和参数校验 RabbitMQ学习系列(六): RabbitMQ 高可用集群
Redis总结(五)缓存雪崩和缓存穿透等问题 前面讲过一些redis 缓存的使用和数据持久化.感兴趣的朋友可以看看之前的文章,http://www.cnblogs.com/zhangweizhon ...
随机推荐
- Web安全测试学习笔记-DVWA-图片上传
很多网站都有上传资源(图片或者文件)的功能,资源上传后一般会存储在服务器的一个文件夹里面,如果攻击者绕过了上传时候的文件类型验证,传了木马或者其他可执行的代码上去,那服务器就危险了. 我用DVWA的文 ...
- JavaScript的概念,引入,基本数据类型
08.05自我总结 JavaScript 一.概念 JavaScript(下文我们会用简称JS来代替)是脚本编程语言,JS语言开发的文件是以.js为后缀,通过在html文件中引入该js文件来控制htm ...
- selenium自动化测试爬取动态页面大全
目录 一:浏览器信息测试 二:查找结点 三:测试动作 四:获取节点信息 五:切换子页面Frame 六,延时请求 七:前进和后退 八:Cookies 八:选项卡处理 九:捕获异常 这里之讲解用法,安 ...
- FCC---Create Texture by Adding a Subtle Pattern as a Background Image
One way to add texture and interest to a background and have it stand out more is to add a subtle pa ...
- jQuery学习笔记Fisrt Day
跳过JS直接JQUERY,“不愧是你”. 对就是我. 今天开始jQuery学习第一天. click事件方法: 鼠标点击 dbl事件方法: 双击鼠标 mouseenter事件方法: 鼠标进入 mouse ...
- 【JDBC】JDBC入门
JDBC的入门 搭建开发环境 编写程序,在程序中加载数据库驱动 建立连接 创建用于向数据库发送SQL的Statement对象 从代表结果集的ResultSet中取出数据 断开与数据库的连接,并释放相关 ...
- rman备份有效性验证/恢复进度监控
故障一定会发生,只是早晚的问题!作为一名DBA时刻要记着备份,备份的有效性同样重要,不要当某一天最需要的时候,发现悲剧了...验证rman备份是否可以成功还原,11g后可以通过命令验证但,验证全备份一 ...
- PHP对URL进行字符串编码
urlencode($url1) urldecode($url) //对URL进行字符串编码和解码 $url1 = 'https://www.baidu.com/uploade/img/123.png ...
- Mybatis整合Redis实现二级缓存
Mybatis集成ehcache . 为什么需要缓存 拉高程序的性能 . 什么样的数据需要缓存 很少被修改或根本不改的数据 业务场景比如:耗时较高的统计分析sql.电话账单查询sql等 . ehcac ...
- (转)vue-router原理
转载地址:https://segmentfault.com/a/1190000014822765 随着前端应用的业务功能起来越复杂,用户对于使用体验的要求越来越高,单面(SPA)成为前端应用的主流形式 ...