“核心技术Ⅱ:时间与日期 API”的版本间差异
跳到导航
跳到搜索
无编辑摘要 |
无编辑摘要 |
||
第8行: | 第8行: | ||
== 时间线(Date、Time)== | == 时间线(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'''”得到两个时刻之间的时间差。 | |||
<syntaxhighlight lang="java"> | |||
Instant start = Instant.now(); | |||
runAlgorithm(); | |||
Instant end = Instant.now(); | |||
Duration timeElapsed = Duration.between(start, end); | |||
long millis = timeElapsed.toMillis(); | |||
</syntaxhighlight> | |||
'''Duration''':是两个时刻之间的时间量。 | |||
# Duration对象的内部存储所需的空间超过了一个1ong的值,因此秒数存储在一个1ong中,而纳秒数存储在一个额外的int中。 | |||
## 如果想要让计算精确到纳秒级,那么需要整个Duration的存储内容; | |||
## 如果不要求这么高的精度,可以用1ong的值来执行计算,然后直接调用“'''toNanos'''”。 | |||
# 通过调用“'''toNanos'''”、“'''toMi11is'''”、“'''getSeconds'''”、“'''toMinutes'''”、“'''toHours'''”、“'''toDays'''”,获得Duration按照传统单位度址的时间长度。 | |||
[[File:时间的Instant和Duration的运算.png|600px]] | |||
* “Instant”和“Duration”类都是不可修改的类,所以诸如“multipliedBy”和“minus”这样的方法都会返回一个新的实例。 | |||
== 本地时间线(LocalDate、LocalTime、LocalDateTime)== | == 本地时间线(LocalDate、LocalTime、LocalDateTime)== | ||
=== 本地时间(LocalDate)=== | === 本地时间(LocalDate)=== |
2020年12月11日 (五) 00:00的版本
关于
相关类:
- Date、Time:
- LocalDate、LocalTime、LocalDateTime:
- ZonedDateTime:
时间线(Date、Time)
Java 的Date和TimeAPI规范要求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”这样的方法都会返回一个新的实例。