存储日期时间的实用方法是什么,这样我就可以让用户查看/查询自己的本地时间的数据,同时保留有关原始日期时间的信息。
基本上,用户希望能够查询(从他们自己的本地时间)从各个时区的系统收集的数据。但偶尔,他们想知道数据是在原始系统中的18:00创建的。当来自世界不同地区的用户就同一事件进行交流时,它会有所帮助。
User1: What? We don't have any data for 20:00
User2: Dude, it says 20:00 right there on my screen.
User1: Wait, what timezone are you? What's the UTC-time?
User2: What is UTC? Is that something with computers?
User1: OMFG! *click*我正在寻找关于如何存储数据的建议。
我正在考虑将所有的日期时间存储在UTC中,并添加一个包含原始时区名称的额外列,该列的形式允许我使用mysql CONVERT_TZ或中的对应列。然后,应用程序将用户输入的日期转换为UTC,我可以轻松地查询数据库。所有日期也可以很容易地转换为应用程序中的用户本地时间。使用原始时区列,我还可以显示原始日期时间。
然而,这意味着,对于我的每一次约会,我需要一个额外的专栏.
start_time_utc datetime
start_time_tz varchar(64)
end_time_utc datetime
end_time_tz varchar(64)我在这里走得对吗?
与这些数据合作过的人会分享他们的经验吗?
(我将使用MySQL 5.5CE)
更新1
数据将在xml文件中传递,其中每个条目在某些本地时区中都有一个日期时间。因此,只有一个插入进程,运行在一个地方。
一旦加载到数据库中,它将在某些web应用程序中呈现给不同时区的用户。对于大多数用例,感兴趣的数据也来自与查看数据的用户相同的时区。对于一些更复杂的用例,一系列事件是相互关联的,跨越多个时区。因此,用户希望能够谈论事件,以便在对方的时间内调查可能的原因/后果。不是UTC,也不是他们自己的当地时间。
发布于 2013-01-20 07:16:51
由于用户可以生活在不同的时区,甚至可以从一个时区移到另一个时区,最佳做法是在UTC中存储日期和时间,并在显示时转换为用户的时区。
发布于 2011-01-10 15:11:10
手册中有一个关于时间戳的部分:
时间戳值从当前时区转换为UTC存储,并从UTC转换回当前时区进行检索。(这只发生在时间戳数据类型,而不是其他类型,如日期时间。)默认情况下,每个连接的当前时区是服务器的时间。时区可以在每个连接的基础上设置,如9.6节“MySQL服务器时区支持”中所述。只要时区设置保持不变,就会得到存储的相同值。如果存储时间戳值,然后更改时区并检索值,则检索的值与存储的值不同。这是因为在两个方向上都没有使用相同的时区进行转换。当前时区作为time_zone系统变量的值可用。
http://dev.mysql.com/doc/refman/5.5/en/timestamp.html
因此,您可以在客户机上使用:SET time_zone = timezone;来设置时区。然后所有查询都会将时间戳转换为正确的时区。不需要在Java中做任何复杂的事情,除了设置时区(我认为甚至可能是JDBC连接字符串中的一个参数)。
发布于 2011-09-28 16:46:21
你总是可以得到祖鲁时间作为你所有计算的基础。
https://stackoverflow.com/questions/4641852
复制相似问题