核心技术Ⅱ:时间与日期 API

来自Wikioe
跳到导航 跳到搜索


关于

相关类:

  1. Date、Time:
  2. LocalDate、LocalTime、LocalDateTime:
  3. ZonedDateTime:

时间线(Date、Time)

Java 的“Date”和“Time”API规范要求Java使用的时间尺度为:

  1. 每天 86400 秒;
  2. 每天正午与官方时间精确匹配;
  3. 在其他时间点上,以精确定义的方式与官方时间接近匹配;

Instant表示时间线上的某个点

  1. “新纪元”:时间线原点(穿过伦敦格林威治皇家天文台的本初子午线所处时区的1970年1月1日的午夜),从该原点开始,时间按照每天86400秒向前或向回度量,精确到纳秒。
  2. Instant的值向回可追溯lO亿年(“Instant.MIN”),最大的值“Instant.MAX”是公元I000000000年的12月31口。
  3. Instant对象用作时间戳:“Instant.now()”当前的时刻;“equals”、“compareTo”比较两个Instant对象;“Duration.between”得到两个时刻之间的时间差。
Instant start = Instant.now(); 
runAlgorithm(); 
Instant end = Instant.now(); 
Duration timeElapsed = Duration.between(start, end);
long millis = timeElapsed.toMillis();

Duration两个时刻之间的时间量

  1. Duration对象的内部存储所需的空间超过了一个1ong的值,因此秒数存储在一个1ong中,而纳秒数存储在一个额外的int中。
    1. 如果想要让计算精确到纳秒级,那么需要整个Duration的存储内容;
    2. 如果不要求这么高的精度,可以用1ong的值来执行计算,然后直接调用“toNanos”。
  2. 通过调用“toNanos”、“toMi11is”、“getSeconds”、“toMinutes”、“toHours”、“toDays”,获得Duration按照传统单位度址的时间长度。

时间的Instant和Duration的运算.png

  • “Instant”和“Duration”类都是不可修改的类,所以诸如“multipliedBy”和“minus”这样的方法都会返回一个新的实例。

本地时间线(LocalDate、LocalTime、LocalDateTime)

本地时间(LocalDate)

日期调整器

本地时间(LocalTime)

时区时间(ZonedDateTime)

格式化和解析

与遗留代码的互操作