Skip to content

Java11 时间类

说实话,看懂即可,不用记.

JDK7以前的时间相关类

一般只在老项目中出现.

时间

  • 0度经线/本初子午线 的时间叫做 格林尼治时间GMT
  • 后来改用艳原子钟,为UTC时间/世界标准时间
  • UTC+8 就是我们所在的时区.

Date类

7f3f3f7b21b35e61d166efd028ef72c2_MD5 源码: b3a26e8b8c1c74abe5e0210ac0c40102_MD5 90bfd61de84445e491a1bf272d9d9442_MD5 API: 空参构造 33926725ba84db10d3f5a453fffd255b_MD5 带参构造 1fced3680d1c1ee645db2b50a6702ad6_MD5 注意:在UTC 1970.1.1 0:00时,我们实际上是1970.1.1 8:00 setTime/getTime b8c32194a69c6472605c0a22f063dbc6_MD5 如何获取一个时间过1年后的时间: 5532fdf7ae14357153c789dea0bc526c_MD5 注意一开始就要用L,防止溢出

这个类的作用:最常见的就是进行时间前后比较/时间加减.

SimpleDateFormat

作用:1. 格式化 2.从字符串中提取Date对象. 实际上是个序列化/反序列器 89c827c262fae0597d2d535f0e87a401_MD5 f3f328ba4867f600d4ee00a54d017a43_MD5 当然,如果需要别的信息,那么就可以查询文档. f83e4bfee0c66305a7165b98afd066f7_MD5 6fb41d9ed7f5ca95ba21767fda738ac9_MD5 如果我想打印星期几,怎么办? 49baedfe833be6d30374c2267b15f79a_MD5 1d37034eaee439759b2de94c27618f9c_MD5 7ae115ae9a3c7695bcacb8e69fda6dfb_MD5

Calendar

其实前面两个类几乎都可以处理任何时间了.这个类只是帮我们简化了Date的处理. c8b55aa623a2184e7001604dfc73550b_MD5 a1d31c5a9d0d011d8805a87d11ab0053_MD5 可以认为就是建立在Date之上的类. 最后一个方法amount如果是负数,那么就往前减

getInstance 27a506d6debfa5bdeb40579c98562505_MD5 关于createCalendar,内部有: a5d9e1519afe303c7a8cbfeed48b0543_MD5 根据时区创建日历.(佛历/农历/GMT,一般默认就是GMT)默认表示当前时间. 日历对象内部存储了以下东西(也就是存了一个数组): bac0e9ea7145ca37aac1c55ca3110217_MD5 细节:获取的月份的范围是0-11月,因此真正的月份要+1 星期:41fe0849dd37c721bd85376cba7a9691_MD5

操作 这些操作种类实际上对应的就是Calendar内部的数组的下标 58e3d131d5d8aaf26c3ec13baab102bf_MD5 38eba202cd3fde69792edfd6c8438d80_MD5 当然:注意要月份加1 f4201b294d42c47da9ae35360202aba6_MD5 索引记不住怎么办? c053a32fd3821e73766be9100595ea92_MD5 set也很简单.但有些情况需要注意: 5341cdd159ae1b36a6d3733ce87b0b17_MD5 这样会发生什么? 24fbba701034c1f0409c244df36cdb20_MD5 也就是会顺便调整时间. add也是同理,很简单: 但是注意负数的情况. d29553b61bd11d3f414ce7a612014e86_MD5 (注,注释写的有问题,应该是减一个月)


JDK8有关的时间类

60ec36a98006b2dda3dcc27d21aa752f_MD5 总览: 5c70a1e1d52ea62b842c29554ca8cd97_MD5 b1728d3827888361d1a2aeea4f5a35fc_MD5

时区ZoneId的常用方法:

17aabfe050b096baf6e2c549f609444a_MD5

Instant:实际上很类似Date类了

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

ZoneDateTime

791eb49ed293dd1b1e875b8c6458302d_MD5 84baad04e93d054ee3d31bd8048e6a9c_MD5 9224290cb289ea0f986b92ea1a6063af_MD5 a3a52d2a1aa37087282c0cc8bb4b9503_MD5 a440d3c59a639ef070f75f0175dff51c_MD5 050b99dcfb09df6b19f805cb215b0631_MD5

DateTimeFormatter

247e402d35c20d6183fd7b53bb438800_MD5 db3d66c3f06e47ca7e50d6a01ef49656_MD5

LocalDate LocalTime LocalDateTime

ed4b245b91b4724cef425b1e12ad9bb9_MD5 注意,如果你用LocalDate的get方法去获取时分秒,那是不行的. 另外,即使是minus开头的,也可以传递负数,表示加;plus开头的,也可以传递负数,表示减. 另外:LocalDateTime还有这两个方法: 904aca13bb0b9b236ba4b88a8e9861d1_MD5 示例: 7fc4f43d1b17af9dfac0f4c3421e4e36_MD5 getMonth返回的字符串,如果我们想返回Value,那么用getMonthValue. 这里的month就不那么反人类了,取值范围是1~12. b2b703928ab1675450ccc463c33956cd_MD5 4a33b367cf45fc230301eb31e905c543_MD5 0a7221a535c2c06d5c27b8a820b0ce59_MD5 LocalTime 不能表示年月日,用了干嘛? 它表示的时间更加精确. 另外,LocalDate有个成员方法:isLeapYear,返回是否是闰年.

Duration Period ChronoUnit

计算时间间隔用. fcbba7085f4f5bbb60022f6dcae3a595_MD5 a564cb9fe813b6378230708c209a76a6_MD5 c768717264e2efd05c036521877f7369_MD5 Duration打印出来是: a410829a63f292a61896d5937409c9ba_MD5 说明间隔197637Hour 27min 42....秒 下面这个最常用,因为最全面.上面两个则不重要. d84e7c68b9b44a6f40ac5b00d410dacd_MD5

一个小应用题: d2600f6006ee82a444588cc8299bc3d0_MD5