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

2022-08-30 23:28:53

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

我有一个名为“users”的MySQL表。现在,在此表上,我希望有一列包含用户居住的时区的时区(这是由用户提供的,它将从列表中选择)。我正在使用PHP,它有一个时区字符串列表,如下所示:

美国时区列表

现在,显而易见的解决方案(至少对我来说)是在“users”表中创建一个VARCHAR列,然后将PHP使用的时区字符串存储在该列中。

现在我想起来了,假设我总是使用PHP与该数据库表进行交互,虽然现在是正确的,但将来可能不会这样。而且(如果我错了,请纠正我)PHP的时区字符串可能不适用于其他编程语言,也许其他语言有自己的“常量”用于时区处理。

那么,如何将用户的时区首选项保存在数据库列中呢?任何想法当然都是值得赞赏的。

注意:PHP时区的有用之处在于,即使DST有效,它们也会自动将其考虑在内,这真是太棒了。所以你可以看到我对使用它们的兴趣,而不仅仅是存储数字偏移量。


答案 1

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

好的,我会的。:)

PHP实现了IANA/Olson/TZDB/ZoneInfo数据库(同一事物有很多名称)。这是最接近行业标准的东西,它几乎在每一种编程语言和平台上实现。

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

时区标签维基维基百科上阅读更多内容

所以是的 - 你只需将时区id字符串存储为varchar。这是最好的办法。


答案 2

推荐