在数据库中存储时区的正确方法?

Emm*_*ola 15 php mysql timezone save

让我解释一下:我不是在询问将特定日期时间的时区存储在数据库中的正确方法.我在谈论时区本身.例如:

我有一个名为'users'的MySQL表.现在,在此表中,我希望有一个列包含用户所在位置的时区(由用户提供,将从列表中选择).我正在使用PHP,它有一个时区字符串列表,如下所示:

美国时区列表

现在,明显的解决方案(至少对我而言)是在'users'表中创建一个VARCHAR列,然后将PHP使用的时区字符串存储在所述列中.

现在我考虑一下,这将假设我将始终使用PHP与该数据库表进行交互,而现在虽然如此,但未来可能不会如此.并且(如果我错了,请纠正我)PHP的时区字符串可能不适用于其他编程语言,也许其他语言有自己的"常量"用于时区处理.

那么如何在DB列中保存用户的时区偏好呢?任何想法肯定是赞赏的.

注意:关于PHP时区的有用之处在于,即使DST生效,它们也会自动将其考虑在内,这非常棒.因此,您可以看到我对使用它们的兴趣,而不仅仅是存储数字偏移量.

Mat*_*int 21

并且(如果我错了,请纠正我)PHP的时区字符串可能不适用于其他编程语言

好的,我会.:)

PHP实现了IANA/Olson/TZDB/ZoneInfo数据库(许多名称都是相同的).这是与行业标准最接近的事情,它几乎在每种编程语言和平台上实现.

唯一不支持它的操作系统是Microsoft Windows,因为Microsoft维护自己的时区数据库.因此,对于以Windows为中心的平台,如.Net,如果您希望支持该时区风格,则必须使用.

阅读时区标签wikiWikipedia上的更多内容.

所以是 - 你只需将时区id字符串存储为varchar.这是最好的事情.