Java常用API(Part2)
Java API(Part2)
最近刚学Java,随便写点学习笔记
Part1见

Part2主要是时间管理相关的类,含JDK8以前的Date,SimpleDateFormat,Calendar
JDK8以后新增的时间类ZoneId时区,Instant时间戳,ZonedDateTime带时区的时间,DateTimeFormatter用于时间的格式化和解析,LocalDate年月日,LocalTime时分秒,LocalDateTime年月日时分秒
以及计算时间间隔的工具类Duration精确计算秒,纳秒,Period计算时间间隔(年月日),ChronoUnit能计算所有单位的时间间隔
Date
全世界的时间有一个统一的计算标准 以前:格林尼治时间/格林威治时间(Greenwich Mean Time)简称GMT 目前世界标准时间:由铯原子的振动频率计算出来的时间,作为世界标准时间(UTC)
中国标准时间:世界标准时间+8h
Date时间类是JDK写好的Javabean类,用来描述时间,精确到毫秒 利用空参构造创建的对象,默认表示系统当前时间 利用有参构造创建的对象,表示指定的时间

SimpleDateFormat
作用
格式化:把时间变成我们喜欢的格式
解析:把字符串表示的时间变成Date对象



上述可在API帮助文档中获取详情
例:将2000-11-11转为2000年11月11日
Calendar
Calendar代表了系统当前时间的日历对象,可以单独修改,获取时间中的年,月,日 细节1:Calendar是一个抽象类,不能直接创建对象,而是通过一个静态方法获取到子类对象 细节2:月份返回0~11,如果取出的是0,实际上是1月 细节3:星期日是一周中的第一天,1表示星期日,2表示星期一
获取Calendar日历类对象的方法:

底层原理: 会根据系统的不同时区来获取不同的日历对象,默认表示当前时间.会把时间中的纪元,年,月,日,时,分,秒,星期等等都放到一个数组当中.


JDK8以后新增的时间类
JDK7:代码麻烦,日期对象的计算和比较要先求出毫秒值.在多线程环境下回导致数据安全的问题 JDK8:简单,而且时间日期对象都是不可变的,解决了多线程环境下的数据安全问题
ZoneId时区
方法名 说明 static Set getAvailableZoneIds() 获取Java中支持的所有时区 static ZoneId systemDefault() 获取系统默认时区(可在Windows设置修改) static ZoneId of(String zoneId) 获取一个指定时区
Instant时间戳

ZonedDateTime带时区的时间

细节:JDK8新增的时间对象都是不可变的,如果我们修改了,增加了,减少了时间,调用者是不会发生改变的,而是产生一个新的时间
DateTimeFormatter用于时间的格式化和解析

LocalDate,LocalTime,LocalDateTime
LocalDate:年月日 LocalTime:时分秒 LocalDateTime:年月日时分秒

LocalDateTime可以转为LocalDate和LocalTime,用以下方法

LocalDate:
LocalTime
LocalDateTime
Duration计算时间间隔(秒,纳秒)较精确
Period计算时间间隔(年,月,日)
ChronoUnit 时间间隔(所有单位)重点掌握