概述
java8之后推出了新的time api.
java.time包下有5个包组成(大部分人用到基础包和format包就足够了)
- java.time – 包含值对象的基础包
- java.time.chrono – 提供对不同的日历系统的访问
- java.time.format – 格式化和解析时间和日期
- java.time.temporal – 包括底层框架和扩展特性
- java.time.zone – 包含时区支持的类
注意:java.time包下所有类都是不可变的、线程安全的
规范
java的Date和Time API规范要求Java使用的时间尺度为:
- 每天
86400秒 - 每天正午与官方时间精准匹配
- 在时间点上,以精确的方式与官方时间接近匹配
Instant
在java中,Instant表示时间线上的某一点。、该时间线的原点为:穿过伦敦格林威治皇家天文台的本初子午线所处时区
的1970年1月1日的午夜`
Instant的常用方法
1 | Instant now() //获取当前时间 |
实例如下:
1 | public static void main(String[] args) throws Exception { |
Duration
Duration是两个时刻之间的时间量
1 | Instant start = Instant.now(); |
本地时间
- LocalDateTime:存储了日期和时间
- LocalDate:只存储了日期
- LocalTime:只存储了时间,如:14:02:43.455。(后面的.455表示毫秒值的最后三位,使用.withNano(0)可把毫秒值设为0)
java.time.LocalDateTime
此类显示的是年月日时分秒(默认的格式为:2017-01-01T01:01:01.555)
1 | LocalDateTime now = LocalDateTime.now(); |
LocalDate
此类显示的是年月日(默认的格式为:2017-01-01)
用法与LocalDateTime类大致一样
LocalTime
此类显示的是时分秒和毫秒值的后三位(21:26:35.693)
用法与LocalDateTime类大致一样
TemporalAdjusters
TemporalAdjusters是调节器,通过with方法来调节时间
1 | public static TemporalAdjuster ofDateAdjuster(UnaryOperator<LocalDate> dateBasedAdjuster); |
1 | LocalDate now = LocalDate.now(); |
DateTimeFormatter
此类的功能与SimpleDateFormat类的功能类似,此类也是线程安全的,在写成时间处理工具类时,可作为静态成员变量,而不用每次都new一个SimpleDateFormat实例,此类是用来创建日期显示的模板,然后对于日期的格式化和解析还是使用LocalDateTime等类的parse静态方法和format方法,其模板属性格式是和SimpleDateFormat一样的,请看:
1 | G 年代标志符 |
对于此类使用先来个简单的新旧api对比演示:
Date转String
1 | //使用Date和SimpleDateFormat |
String转Date
1 | //使用Date和SimpleDateFormat |