主要观点:过去在各种活动网站工作时,存储事件时间是个难题,基于经验给出当前推荐。
关键信息:
- 问题:事件在特定日期和时间发生,时间细节很重要,网站常因时间存储问题导致用户到达错误时间错过活动。
- 所谓“最佳实践”:将所有时间存储为 UTC,显示时再转换为用户当前时区,但 PostgreSQL 的 TIMESTAMP WITH TIME ZONE 仅存储 UTC 值。
- 可能出错的情况:计算并仅存储 UTC 时间会丢失事件创建者的原始意图,包括用户错误(选择错误时区或地点)、国际时区规则变化(如黎巴嫩、土耳其等国)、Microsoft Exchange 的 DST 更新问题等。
推荐:记录原始用户意图(如事件发生时间),获取事件发生地的时区信息,精确捕获后可进行反规范化处理,存储 UTC 时间用于各种目的,编辑事件时可保持原始时间。
重要细节: - 提到 mailto:tz@iana.org 邮件列表,展示时区规则变化的例子。
- 以 Google Calendar 的时区 UI 为例说明其糟糕之处,无搜索选项。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。