这是一个概念性问题,因此这里没有代码片段。
假设我创建了一个事件数据库。其中一些在纽约,一些在芝加哥,一些在凤凰城,等等......
我的服务器的时区设置为纽约。
在我看来,为所有这些事件创建 UNIX 时间戳时有两种选择。
考虑时区。 (即,1 月 1 日午夜在芝加哥和菲尼克斯发生的事件将具有不同的时间戳)。然后,每当我想以文本格式显示日期时,我都必须再次考虑时区。
假装所有事件都发生在纽约来捏造事实。 1 月 1 日午夜在芝加哥和菲尼克斯发生的事件将具有相同的时间戳。由于我的服务器设置为纽约,因此我不必为每个事件考虑时区。
哪种方法更好?方法 1 给出了更“真实”的时间戳,但方法 2 似乎不太复杂,但仍然给出相同的结果。
一切应以 UTC 存储,以便有一致的比较和计算基础。只有当有人参与时才应将其转换为当地时间。
使用 UTC 将极大地简化您的代码,因为您不必在每个日期/时间中携带时区并在许多不同的区域执行复杂的计算 - 我们did这在一个项目上一次,我会quit在我再次这样做之前:-)
换句话说,如果用户输入纽约时间,请尽快将其转换为 UTC。向用户显示日期/时间时,请尽可能晚地将其更改回本地时间。
And, unless you have a real, pressing need (for example) to tell someone in Mumbai what the local time was in New York when the NY event happened (or will happen), you don't need to store the timezone for the event. If you do have such a need (a), by all means store the timezone as well, so you can get both local time where you are and local time where the event is/was.
(a) CJBS points out a few good examples in comments below, such as:
- 在航班上,了解抵达目的地的当地时间非常有用,以便可以在那里预订出租车;或者
- 安排与活动中的人员在特定时间见面。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)