“核心技术Ⅱ:时间与日期 API”的版本间差异

来自Wikioe
跳到导航 跳到搜索
无编辑摘要
无编辑摘要
第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的版本


关于

相关类:

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

时间线(Date、Time)

Java 的DateTimeAPI规范要求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)

格式化和解析

与遗留代码的互操作