存储人类事件的时间

主要观点:过去在各种活动网站工作时,存储事件时间是个难题,基于经验给出当前推荐。
关键信息:

  • 问题:事件在特定日期和时间发生,时间细节很重要,网站常因时间存储问题导致用户到达错误时间错过活动。
  • 所谓“最佳实践”:将所有时间存储为 UTC,显示时再转换为用户当前时区,但 PostgreSQL 的 TIMESTAMP WITH TIME ZONE 仅存储 UTC 值。
  • 可能出错的情况:计算并仅存储 UTC 时间会丢失事件创建者的原始意图,包括用户错误(选择错误时区或地点)、国际时区规则变化(如黎巴嫩、土耳其等国)、Microsoft Exchange 的 DST 更新问题等。
    推荐:记录原始用户意图(如事件发生时间),获取事件发生地的时区信息,精确捕获后可进行反规范化处理,存储 UTC 时间用于各种目的,编辑事件时可保持原始时间。
    重要细节:
  • 提到 mailto:tz@iana.org 邮件列表,展示时区规则变化的例子。
  • 以 Google Calendar 的时区 UI 为例说明其糟糕之处,无搜索选项。
阅读 7
0 条评论