DateTime

表示民用时间(或偶尔表示物理时间)。

此类型可以通过几种可能的方式之一表示民用时间:

  • 当设置了 utcOffset 但未设置 timeZone 时:一个日历日内相对于世界协调时间 (UTC) 具有特定偏移量的民用时间。
  • 当设置了 timeZone 但未设置 utcOffset 时:特定时区中一个日历日内的民用时间。
  • 当未设置 timeZone 和 utcOffset 时:本地时间中一个日历日内的民用时间。

日期相对于公历格里历。

如果年、月或日为 0,则 DateTime 被视为分别没有特定的年、月或日。

如果设置了所有日期和时间字段,并且设置了 time_offset 的任一情形,此类型也可用于表示物理时间。请考虑改用 Timestamp 消息来表示物理时间。如果您的应用场景还要存储用户的时区,可以在另一个字段中完成该操作。

此类型的灵活性高于某些应用的需求。请务必记录并验证应用的限制。

JSON 表示法
{
  "year": integer,
  "month": integer,
  "day": integer,
  "hours": integer,
  "minutes": integer,
  "seconds": integer,
  "nanos": integer,

  // Union field time_offset can be only one of the following:
  "utcOffset": string,
  "timeZone": {
    object (TimeZone)
  }
  // End of list of possible types for union field time_offset.
}
字段
year

integer

可选。某年。必须是 1 到 9999 之间的数字,如果指定的日期时间不含“年”,则为 0。

month

integer

可选。某月。必须是 1 到 12 之间的数字,如果指定的日期时间不含“月”,则为 0。

day

integer

可选。某日。必须是 1 到 31 之间的数字并且符合具体的年和月,如果指定的日期时间不含“日”,则为 0。

hours

integer

可选。一天中的小时(采用 24 小时制)。应是 0 到 23 之间的数字,默认为 0(午夜)。对于业务结束时间等场景,API 可以选择允许“24:00:00”一值。

minutes

integer

可选。一天中某小时的分钟数。必须是 0 到 59 之间的数字,默认为 0。

seconds

integer

可选。时间的秒数部分。通常必须是 0 到 59 之间的数字,默认为 0。如果 API 允许闰秒,则 API 可以允许 60 一值。

nanos

integer

可选。秒数的小数部分(以纳秒为单位)。必须是 0 到 999,999,999 之间的数字,默认为 0。

联合字段 time_offset。可选。指定 DateTime 的世界协调时间 (UTC) 偏移量或时区。考虑到时区数据将来可能会发生变化(例如,某个国家/地区修改了夏令时开始/结束日期,而受影响范围内的未来 DateTime 已存储),请仔细进行选择。如果省略,则 DateTime 被视为采用本地时间。time_offset 只能是下列其中一项:
utcOffset

string (Duration format)

世界协调时间 (UTC) 偏移量。必须是介于 -18 小时到 +18 小时之间的整数秒数。例如,UTC 偏移量 -4:00 将表示为 { seconds: -14400 }。

该时长以秒为单位,最多包含九个小数位,以“s”结尾。示例:"3.5s"

timeZone

object (TimeZone)

时区。