Java11 时间类
说实话,看懂即可,不用记.
JDK7以前的时间相关类¶
一般只在老项目中出现.
时间¶
- 0度经线/本初子午线 的时间叫做 格林尼治时间GMT
- 后来改用艳原子钟,为UTC时间/世界标准时间
- UTC+8 就是我们所在的时区.
Date类¶
源码:
API:
空参构造
带参构造
注意:在UTC 1970.1.1 0:00时,我们实际上是1970.1.1 8:00
setTime/getTime
如何获取一个时间过1年后的时间:
注意一开始就要用L,防止溢出
这个类的作用:最常见的就是进行时间前后比较/时间加减.
SimpleDateFormat¶
作用:1. 格式化 2.从字符串中提取Date对象. 实际上是个序列化/反序列器
当然,如果需要别的信息,那么就可以查询文档.
如果我想打印星期几,怎么办?

Calendar¶
其实前面两个类几乎都可以处理任何时间了.这个类只是帮我们简化了Date的处理.
可以认为就是建立在Date之上的类.
最后一个方法amount如果是负数,那么就往前减
getInstance
关于createCalendar,内部有:
根据时区创建日历.(佛历/农历/GMT,一般默认就是GMT)默认表示当前时间.
日历对象内部存储了以下东西(也就是存了一个数组):
细节:获取的月份的范围是0-11月,因此真正的月份要+1
星期:
操作
这些操作种类实际上对应的就是Calendar内部的数组的下标
当然:注意要月份加1
索引记不住怎么办?
set也很简单.但有些情况需要注意:
这样会发生什么?
也就是会顺便调整时间.
add也是同理,很简单:
但是注意负数的情况.
(注,注释写的有问题,应该是减一个月)
JDK8有关的时间类¶
总览:

时区ZoneId的常用方法:¶

Instant:实际上很类似Date类了¶
注意:
now()获取的是标准时间
atZone:在已经知道一个时间戳时,得到当时在某个ZoneId的时间.ZonedDateTime是带时区的时间.
两个静态方法,其实是构造函数
后面都是成员方法了.
is系列
加减时间系列:注意,由于时间对象是不可变的,因此是有返回的值的.

ZoneDateTime¶

DateTimeFormatter¶

LocalDate LocalTime LocalDateTime¶
注意,如果你用LocalDate的get方法去获取时分秒,那是不行的.
另外,即使是minus开头的,也可以传递负数,表示加;plus开头的,也可以传递负数,表示减.
另外:LocalDateTime还有这两个方法:
示例:
getMonth返回的字符串,如果我们想返回Value,那么用getMonthValue.
这里的month就不那么反人类了,取值范围是1~12.
LocalTime 不能表示年月日,用了干嘛?
它表示的时间更加精确.
另外,LocalDate有个成员方法:isLeapYear,返回是否是闰年.
Duration Period ChronoUnit¶
计算时间间隔用.
Duration打印出来是:
说明间隔197637Hour 27min 42....秒
下面这个最常用,因为最全面.上面两个则不重要.

一个小应用题:
