java8新特性回顾(三)
来源:互联网 发布:c语言运行快捷键 编辑:程序博客网 时间:2024/05/01 04:56
1.java.time api
为什么需要新的日期/时间API:
可变性:像时间和日期这样的类应该是不可变的。而java.util.Date与java.util.Calendar中的所有属性都是可变的,给计算和传参造成不便。
偏移性:Date中的年份是从1900开始的,而月份都是从0开始的。
格式化:格式化只对Date有用,Calendar则不行。用于格式化和解析的类在另一个java.text包中定义
线程安全:SimpleDateFormat被设计成非线程安全的。
命名: java.util.Date 根本不是“日期”,而是1970-01-01Z开始计时经过的毫秒数所对应的“时间点”, java.util.Calendar 也不是真实的日历。java.sql.Date和java.util.Date重名也不是好的设计。
java8 time api原则
不变性:新的日期/时间API中,所有的类都是不可变的,这对多线程环境有好处。
关注点分离:新的API将人可读的日期时间和机器时间(unix timestamp)明确分离,它为日期(Date)、时间(Time)、日期时间(DateTime)、时间戳(unix timestamp)以及时区定义了不同的类。
清晰:在所有的类中,方法都被明确定义用以完成相同的行为。举个例子,要拿到当前实例我们可以使用now()方法,在所有的类中都定义了format()和parse()方法,而不是像以前那样专门有一个独立的类。为了更好的处理问题,所有的类都使用了工厂模式和策略模式,一旦你使用了其中某个类的方法,与其他类协同工作并不困难。
实用操作:所有新的日期/时间API类都实现了一系列方法用以完成通用的任务,如:加、减、格式化、解析、从日期/时间中提取单独部分,等等。
可扩展性:新的日期/时间API是工作在ISO-8601日历系统上的,但我们也可以将其应用在非IOS的日历上。
Java8日期/时间API包含以下相应的包:
java.time包:这是新的Java日期/时间API的基础包,所有的主要基础类都是这个包的一部分,如:LocalDate, LocalTime, LocalDateTime, Instant, Period, Duration等等。所有这些类都是不可变的和线程安全的,在绝大多数情况下,这些类能够有效地处理一些公共的需求。
java.time.chrono包:这个包为非ISO的日历系统定义了一些泛化的API,我们可以扩展AbstractChronology类来创建自己的日历系统。
java.time.format包:这个包包含能够格式化和解析日期时间对象的类,在绝大多数情况下,我们不应该直接使用它们,因为java.time包中相应的类已经提供了格式化和解析的方法。
java.time.temporal包:这个包包含一些时态对象,我们可以用其找出关于日期/时间对象的某个特定日期或时间,比如说,可以找到某月的第一天或最后一天。你可以非常容易地认出这些方法,因为它们都具有“withXXX”的格式。
java.time.zone包:这个包包含支持不同时区以及相关规则的类。
- java8新特性回顾(三)
- Java8新特性(三)------Stream
- java8新特性回顾(二)---stream api
- java8新特性回顾(五)---并发增强之stampedLock
- JAVA8新特性 -- stream(三)
- java8新特性探究(三)-Stream类
- java8新特性(三):Stream流的概念
- Java8新特性之并行流(三)
- Java8 新特性之三---------方法引用
- Java8新特性之三方法引用
- Java8新特性(部分)
- java8新特性回顾(一)---函数式接口和lamda表达式
- java8新特性回顾(四)---并发增强之Striped64和longAdder
- java8新特性回顾(六)---跟OOM:permGen说再见
- java8 新特性总结(-)转载整理
- JAVA8 新特性(二)转载整理
- java8新特性(终极版)
- Java8新特性(二)------lamda表达式
- Nginx之日志拆分-yellowcong
- :after 、float
- 【模拟】Codeforces #444 C. Solution for Cube
- 拥抱大前端 盘点那些值得你了解的最佳开发实践
- [kuangbin带你飞]专题九 连通图 Critical Links UVA
- java8新特性回顾(三)
- K:DHCP工作过程
- Android studio 无法创建java类的解决办法
- 数据结构-栈的操作
- 搜索引擎和知识图谱那些事 (上).基础篇
- 07 rest-framework之视图函数基类和路由类
- 解释型语言与编译型语言的区别
- Centos上安装lrzsz
- namespace笔记----C++