核心技术Ⅱ:时间与日期 API
关于
相关类:
- Date、Time:
- LocalDate、LocalTime、LocalDateTime:
- ZonedDateTime:
时间线(Date、Time)
Java 的“Date”和“Time”API规范要求Java使用的时间尺度为:
- 每天 86400 秒;
- 每天正午与官方时间精确匹配;
- 在其他时间点上,以精确定义的方式与官方时间接近匹配;
Instant:表示时间线上的某个点。
- “新纪元”:时间线原点(穿过伦敦格林威治皇家天文台的本初子午线所处时区的1970年1月1日的午夜),从该原点开始,时间按照每天86400秒向前或向回度量,精确到纳秒。
- Instant的值向回可追溯lO亿年(“Instant.MIN”),最大的值“Instant.MAX”是公元I000000000年的12月31口。
- 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:两个时刻之间的时间量。
- Duration对象的内部存储所需的空间超过了一个1ong的值,因此秒数存储在一个1ong中,而纳秒数存储在一个额外的int中。
- 如果想要让计算精确到纳秒级,那么需要整个Duration的存储内容;
- 如果不要求这么高的精度,可以用1ong的值来执行计算,然后直接调用“toNanos”。
- 通过调用“toNanos”、“toMi11is”、“getSeconds”、“toMinutes”、“toHours”、“toDays”,获得Duration按照传统单位度址的时间长度。
- “Instant”和“Duration”类都是不可修改的类,所以诸如“multipliedBy”和“minus”这样的方法都会返回一个新的实例。