表示民用时间(或偶尔表示物理时间)。
此类型可以通过几种可能的方式表示民用时间:
- 当设置了 utcOffset 但未设置 timeZone 时:日历上的一天中与世界协调时间 (UTC) 有特定偏移量的民用时间。
- 如果设置了 timeZone 但未设置 utcOffset:特定时区中某个日历日的民用时间。
- 如果未设置 timeZone 和 utcOffset:日历日期上的民用时间(以本地时间为准)。
日期相对于前公历。
如果年、月或日为 0,则相应 DateTime 被视为没有特定的年、月或日。
如果设置了所有日期和时间字段,并且设置了 time_offset
oneof 的任一情形,此类型也可用于表示实际时间。请考虑改用 Timestamp
消息来表示实际时间。如果您的使用场景还需要存储用户的时区,可以在另一个字段中进行存储。
这种类型比某些应用可能需要的类型更灵活。请务必记录并验证应用的限制。
JSON 表示法 |
---|
{ "year": integer, "month": integer, "day": integer, "hours": integer, "minutes": integer, "seconds": integer, "nanos": integer, // Union field |
字段 | |
---|---|
year |
可选。某年。必须介于 1 到 9999 之间,或为 0(即指定不含年份的日期时间)。 |
month |
可选。月份。必须是 1 到 12 之间的数字,如果指定了日期时间但未指定月份,则为 0。 |
day |
可选。某日。必须是 1 到 31 之间的数字并且符合具体的年份和月份,如果指定了不含日期的日期时间,则该值为 0。 |
hours |
可选。一天中的小时(采用 24 小时制)。应是 0 到 23 之间的数字,默认为 0(午夜)。对于业务结束时间等场景,API 可以选择允许“24:00:00”一值。 |
minutes |
可选。一天中某小时的分钟数。必须是 0 到 59 之间的数字,默认为 0。 |
seconds |
可选。时间的秒数部分。通常必须是 0 到 59 之间的数字,默认为 0。如果 API 允许闰秒,则 API 可以允许 60 一值。 |
nanos |
可选。秒数的小数部分(以纳秒为单位)。必须介于 0 到 999,999,999 之间,默认为 0。 |
联合字段 time_offset 。可选。指定 DateTime 的 UTC 偏移量或时区。请仔细选择,因为时区数据将来可能会发生变化(例如,某个国家/地区修改了夏令时开始/结束日期,而受影响范围内的未来 DateTime 已存储)。如果省略,则 DateTime 被视为采用本地时间。time_offset 只能是下列其中一项: |
|
utcOffset |
世界协调时间 (UTC) 偏移量。必须是介于 -18 小时到 +18 小时之间的整数秒数。例如,UTC 偏移量 -4:00 将表示为 { seconds: -14400 }。 该时长以秒为单位,最多包含九个小数位,以“ |
timeZone |
时区。 |
TimeZone
表示 IANA 时区数据库中的时区。
JSON 表示法 |
---|
{ "id": string, "version": string } |
字段 | |
---|---|
id |
IANA 时区数据库时区。例如“America/New_York”。 |
version |
可选。IANA 时区数据库版本号。例如“2019a”。 |