# 概述

有两种表示时间的基本方法。

  • 人类时间:比如年、月、日、时、分和秒。
  • 机器时间:以时间线连续测量时间,从一个称为时代的起点开始,以纳秒为单位。

Date-Time 包提供了丰富的表示日期和时间的类。Date-Time API 中的某些类用于表示机器时间,其他类更适合表示人类时间。

首先确定您需要的日期和时间的哪些方面,然后选择满足这些需求的课程或课程。选择基于时间的课程时, 首先要确定是否需要表示人类时间或机器时间。然后,您可以确定需要表示的时间。你需要一个时区吗? 日期和时间?仅限日期?如果你需要一个日期,你需要月,日和年,或者一个子集?

TIP

术语:在本教程中,Date-Time API 中用于捕获和处理日期或时间值(如 Instant,LocalDateTime 和 ZonedDateTime) 的类称为基于时间的类(或类型)。支持类型,如 TemporalAdjuster 接口或 DayOfWeek 枚举,不包含在此定义中。

例如,您可以使用 LocalDate 对象来表示出生日期,因为大多数人在同一天观察他们的生日, 无论他们是在其出生城市还是在国际日期线的另一侧的全球范围内。如果您正在追踪占星术时间, 那么您可能需要使用 LocalDateTime 对象来表示出生日期和时间,或者使用 ZonedDateTime(其中还包括时区)。 如果你正在创建一个时间戳,那么你很可能会使用一个 Instant,它允许你将时间线上的一个瞬时点与另一个点进行比较。

下表总结了 java.time 包中存储日期或时间信息或可用于测量时间量的基于时间的类。 列中的复选标记表示该类使用该特定类型的数据,而 toString 列显示使用 toString 方法打印的实例。

类或枚举 Year Month Day Hours Minutes Seconds* 区域偏移 / Zone Offset 区域 ID / Zone ID toString 输出 相关课程
Instant - - - - - - - 2013-08-20T15:16:26.355Z 瞬时
LocalDate - - - - - 2013-08-20 日期类
LocalDateTime - - 2013-08-20T08:16:26.937 日期和时间类
ZonedDateTime 2013-08-21T00:16:26.941+09:00[Asia/Tokyo] 时区和偏移类
LocalTime - - - - - 08:16:26.943 日期和时间类
MonthDay - - - - - - --08-20 日期类
Year - - - - - - - 2013 日期类
YearMonth - - - - - - 2013-08 日期类
Month - - - - - - - AUGUST DayOfWeek and Month Enums
OffsetDateTime - - 2013-08-20T08:16:26.954-07:00 时区和偏移类
OffsetTime - - - - - - 时区和偏移类
Duration - - ** ** ** - - PT20H (20 hours) 周期和持续时间
Period - - - *** *** P10D (10 days) 周期和持续时间
  • * 秒被捕获到纳秒精度。
  • ** 这个类不存储这些信息,但有方法在这些单元中提供时间。
  • *** 将周期添加到 ZonedDateTime 时,会观察到夏令时或其他本地时差。