Ron*_*nis 7 mysql timezone datetime database-design convert-tz
什么是存储日期时间的实用方法,以便我可以让用户查看/查询自己当地时间的数据,同时保留有关原始日期时间的信息.
基本上,用户希望能够查询(从他们自己的本地时间)从各个时区的系统收集的数据.但偶尔,他们想知道数据是在原始系统中的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*
Run Code Online (Sandbox Code Playgroud)
我正在寻找有关如何存储数据的建议.
我正在考虑以UTC格式存储所有日期时间,并添加一个包含原始时区名称的附加列,其形式允许我使用mysql CONVERT_TZ或Java中的对应物.然后,应用程序将用户输入的日期转换为UTC,我可以轻松查询数据库.所有日期也可以轻松转换为应用程序中的用户本地时间.使用原始时区列我也可以显示原始日期时间.
但是,这意味着对于我所拥有的每个日期时间,我需要一个额外的列...
start_time_utc datetime
start_time_tz varchar(64)
end_time_utc datetime
end_time_tz varchar(64)
Run Code Online (Sandbox Code Playgroud)
我在这里走在正确的轨道上吗?
是否有人使用这些数据分享他们的经验?
(我将使用MySQL 5.5 CE)
更新1
数据将以xml文件的形式提供,其中每个条目在某个本地时区具有日期时间.因此,只有一个插入过程,在一个地方运行.
一旦加载到数据库中,它将在一些Web应用程序中呈现给不同时区的用户.对于大多数用例,感兴趣的数据也来自与查看数据的用户相同的时区.对于一些更复杂的用例,一系列事件是互连的并跨越多个时区.因此,用户希望能够谈论事件,以便在另一个时间调查可能的原因/后果.不是UTC,不是他们当地的时间.
该手册有一个专门针对此目的的部分,关于时间戳:
\n\n\n\n\nTIMESTAMP 值从当前时区转换为 UTC 进行存储,并从 UTC 转换回当前时区进行检索。(这种情况仅发生在 TIMESTAMP 数据类型上,而不会发生在 DATETIME 等其他类型上。)默认情况下,每个连接的当前时区是服务器的时间。时区可以在每个连接的基础上设置,如\n 第 9.6 节,\xe2\x80\x9cMySQL 服务器时区\n 支持\xe2\x80\x9d 中所述。只要时区设置保持不变,您就会得到与存储的值相同的值。如果存储 TIMESTAMP 值,然后更改时区并检索该值,则检索到的值与存储的值不同。出现这种情况的原因是\n 两个方向的转换未使用相同的时区。当前时区可作为 time_zone 系统变量的值使用。
\n\n \n
所以你可以在客户端使用:SET time_zone = timezone;来设置时区。然后所有查询都会将时间戳转换为正确的时区。除了设置时区(我认为甚至可能是 JDBC 连接字符串中的参数)之外,不需要在 Java 中做任何复杂的事情
| 归档时间: |
|
| 查看次数: |
9484 次 |
| 最近记录: |