日期时间与时区
本章说明日期时间字段的时区语义与精度选择。
1. 当前版本统一按墙钟时间处理
全部日期时间字段都按墙钟时间存取:填写什么就存什么、显示什么就是什么,不做任何时区换算。
这意味着:
- 上海的使用者填写 21:00,纽约的同事打开同一条记录看到的也是 21:00;
- 数据库中存储的值、后台处理的值、界面显示的值三者完全一致;
- 切换个人时区偏好不会改变业务字段中日期时间的显示。
多数业务日期本就属于这一类:发票日期、消费日期、入职日期、合同日期——换一个时区的人来看,数字不应该变。
字段上不提供「自动匹配时区」开关。 早期版本曾规划该开关用于表达"跨时区指向同一物理时刻"的场景,当前版本已将其整体冻结,设计界面不显示该项,后台也不接受该配置。需要表达跨时区时刻的业务场景,暂时只能通过约定(例如在字段名或说明中注明"北京时间")来处理。
2. 系统记录的时间是例外
系统自动维护的创建时间与更新时间按绝对时刻处理:底层统一存储世界时,界面按各人的时区偏好显示。
因此直接查看底层数据时,创建时间可能与界面显示相差若干小时,这是正常现象。
这一行为由系统维护,不需要也无法配置。
3. 精度的选择
日期时间字段通过显示样式选择精度,共五档:
| 精度 | 适用场景 |
|---|---|
| 年 | 年度类数据 |
| 年月 | 月度类数据 |
| 年月日 | 最常用。发票日期、单据日期、入职日期 |
| 日期时间 | 需要精确到时分的场景 |
| 时间 | 仅需时分,不关心日期 |
五档精度的底层存储一致,后续调整精度不会造成数据转换问题。
部分场景可使用区间形式,一次选择一对起止时间,而非单个时间点(例如活动起止日期)。
4. 设计建议
| 建议 | 说明 |
|---|---|
| 按实际需要选择精度 | 只需要到"哪一天"就选年月日,不必一律使用日期时间。精度越细,填写与核对的成本越高 |
| 跨时区团队需明确约定 | 当前版本不做换算,若团队分布在多个时区,应在字段名或说明中注明基准时区 |
| 不要用文本字段存日期 | 文本无法参与日期比较、排序与区间筛选 |
5. 常见问题
| 问题 | 说明 |
|---|---|
| 不同时区的同事看到的业务日期是否一致 | 一致。当前版本业务字段统一按墙钟处理,不做换算 |
| 界面显示的创建时间与底层数据相差几小时 | 正常。系统记录的时间按绝对时刻存储,界面按各人时区显示 |
| 找不到"自动匹配时区"设置 | 该开关已在当前版本冻结,设计界面不再提供 |
| 已有数据的字段能否修改精度 | 可以。五档精度底层存储一致,不涉及数据转换 |