Overview

有两种表示时间的基本方法。一种方式以人为单位表示时间,称为*“人的时间”,例如年,月,日,小时,分钟和秒。另一种方法* machine time 沿时间轴从原点 epoch *沿时间轴连续测量时间,以纳秒为单位。 Date-Time 包提供了丰富的类来表示日期和时间。 Date-Time API 中的某些类旨在表示机器时间,而其他一些类更适合于表示人工时间。

首先确定日期和时间的哪些方面,然后选择满足这些需求的一个或多个类。在选择基于时间的类时,首先要确定是代表人工时间还是机器时间。然后,您确定需要代表时间的哪些方面。您需要一个timezone吗?日期和时间?仅日期?如果需要日期,是否需要月,日,年或子集?

Terminology:

在本教程中,Date-Time API 中catch并使用日期或时间值的类(例如InstantLocalDateTimeZonedDateTime)被称为基于时间的类(或类型)。支持的类型,例如TemporalAdjusterinterface或DayOfWeek枚举,不包含在此定义中。

例如,您可能使用LocalDate对象来表示生日,因为大多数人都在同一天庆祝生日,无论他们是在出生城市还是在国际日期线的另一侧。如果要跟踪占星时间,则可能要使用LocalDateTime对象表示出生日期和时间,或者使用ZonedDateTime(还包括timezone)。如果要创建时间戳,则很可能要使用Instant,它可以将时间轴上的一个瞬时点与另一个瞬时点进行比较。

下表总结了java\.time程序包中的基于时间的类,这些类存储日期和/或时间信息,或可用于测量时间量。列中的复选标记表示该类使用该特定类型的数据,并且 toString Output **列显示使用toString方法打印的实例。 “在哪里讨论”列会将您链接到教程中的相关页面。

类或枚举YearMonthDayHoursMinutesSeconds*Zone OffsetZone IDtoString OutputWhere Discussed
Instant checked 2013\-08\-20T15:16:26\.355ZInstant Class
LocalDatecheckedcheckedchecked 2013\-08\-20Date Classes
LocalDateTimecheckedcheckedcheckedcheckedcheckedchecked 2013\-08\-20T08:16:26\.937日期和时间类别
ZonedDateTimecheckedcheckedcheckedcheckedcheckedcheckedcheckedchecked2013\-08\-21T00:16:26\.941+09:00\[Asia/Tokyo\]timezone和offset类
LocalTime checkedcheckedchecked 08:16:26\.943日期和时间类别
MonthDay checkedchecked \-\-08\-20Date Classes
Yearchecked 2013Date Classes
YearMonthcheckedchecked 2013\-08Date Classes
Month checked AUGUSTDayOfWeek 和月份枚举
OffsetDateTimecheckedcheckedcheckedcheckedcheckedcheckedchecked 2013\-08\-20T08:16:26\.954\-07:00timezone和offset类
OffsetTime checkedcheckedcheckedchecked 08:16:26\.957\-07:00timezone和offset类
Duration ******checked PT20H(20 小时)期限和期限
Periodcheckedcheckedchecked ******P10D(10 天)期限和期限
*秒被catch到纳秒精度。
**此类不存储此信息,但是具有在这些单位中提供时间的方法。
***Period添加到ZonedDateTime时,会观察到夏令时或其他当地时间。