在数据库中存储时区

问题描述:

我将使用MySQL和PHP,并且需要将时区存储在数据库中。用了一下就可以读书了,好像我需要使用像America/Los_Angeles,而不是,Pacific Standard TimePST8PDT+02.00在数据库中存储时区

难道我存储整个America/Los_Angeles串,或者是有某种它的整数ID如https://*.com/a/11580459/1032531描述为c#?如果谁是字符串,最大字符数是多少?

America/New_York这样的时区字符串是指所谓的zoneinfo数据库中的条目。读这个。 https://www.iana.org/time-zones它目前由互联网号码分配机构维护。它变化很大,因为它的维护者争相跟上日光节约规则和其他临时政治事物的变化。

在类UNIX系统上,条目存储在文件系统目录层次结构中,而不是某些代码号。

你问:

我是否存储整个America/Los_Angeles

是。

是否有某种整数ID呢?

不,如果您希望您的应用程序和数据库能够面向未来,则不是。在MySQL部分有一个包含zoneinfo数据的time_zone_id,但是没有人对保持这些数字保持不变作出任何承诺。

当前(2015g)数据库中最长的字符串是“America/Argentina/ComodRivadavia”。它的长度是32个字符。使用VARCHAR(64)来存储这些信息可能是有意义的,所以你永远不会用完。

顺便说一下,WordPress为用户提供了一个可用时区名称的选择列表(下拉列表),并将用户的选择存储为文本。

http://www.iana.org/time-zones

入住这里MySql DateTime

的MySQL从当前时区转换TIMESTAMP值以UTC进行存储,并返回从UTC到检索当前时区。 (对于其他类型(如DATETIME),不会发生这种情况。)默认情况下,每个连接的当前时区是服务器的时间。时区可以基于每个连接进行设置。只要时区设置保持不变,您可以恢复您存储的相同值。

您应该在表格中添加一个新列以保留您的时区以及提取信息何时转换您的时区。

+1

请描述“您的表中的新列以保持您的时区”引用。 – user1032531

+1

如果您需要确切地知道数据库转换日期时间之前的哪个时区,则需要保留它,因为数据库会自动将您的日期时间转换为服务器时区并存储它。 – Laurentiu

+0

我的意思是我应该使用'VARCHAR(32)'来存储它吗?这对于所有时区是否足够大?另外,确认时区没有一些整数ID。 – user1032531