gpt4 book ai didi

mysql - 在 MySQL 中处理多个时区

转载 作者:太空宇宙 更新时间:2023-11-03 10:52:36 26 4
gpt4 key购买 nike

我正在为我的应用程序使用 MySQL 数据库。我使用 Java(带 Spring) 进行 Web 开发,使用 Apache Tomcat 进行应用程序服务器。在我的应用程序中,有多个用户具有不同的 Timezons。现在假设我正在计算用户的总登录时间。

我正在提供 SQL Fiddle 链接 here用于必要的 DDL 和 DML 查询。因为我还编写了选择查询来计算每个用户的总登录时间。因为用户 ID 为 3 和 4 的用户还没有注销,所以我使用 NOW() 来计算总登录时间。但他们来自不同的时区。我用 GMT-0 将所有时间存储在 MYSQL 中。那么它是否会给我 userId 3 和 4 的错误记录时间?如果错误,有什么解决方法?

最佳答案

So will it give me wrong logged time for userId 3 and 4 or not? If wrong, what is solution for it?

如果你真的用 GMT+0 记录值,不会给你错误的答案。本地时间对用户来说并不重要 - 您感兴趣的只是登录和注销之间经过了多长时间。

事实上,使用用户的本地时区会使这变得更加困难 - 您最终不得不考虑夏令时。例如,假设您在 2014 年 10 月 26 日记录我的交互。我的本地登录时间可能是凌晨 1:45,本地注销时间可能是凌晨 1:05,这听起来很困惑——直到你意识到登录时间是夏令时生效的时候。如果您只记录 UTC 时间 (GMT+0),您会记录 00:45 和 01:05,留下 20 分钟的明显差异。

基本上,当您尝试记录时间点时,您可能希望记录用户所在的时区,这样您就可以告诉他们他们当时看到了什么……但您应该记录UTC 中的日期/时间本身,以便于操作(例如,转换到另一个时区)。您应该非常很少记录本地日期/时间;它对重复发生的事件很有用(例如“每周本地时间下午 2 点”),但对于个别时间点来说,这只是一个坏主意。

请注意,记录 UTC 时间与在服务器上记录本地时间不同;您应该尝试确保服务器的时区与应用程序的行为完全无关……除此之外,这意味着如果您在不同的时区有多个服务器,也不会发生任何不好的事情。鉴于NOW()使用系统本地时区,可能给出错误答案 - 最好尝试使用使用 UTC 的函数(例如使用 UTC_TIMESTAMP),或者将 MySQL 中的“当前时区”设置为 UTC。 (您声称已经将日期存储在 GMT-0 中,但不清楚如果您使用 NOW(),您希望如何发生这种情况,除非您将时区设置为 UTC。)

关于mysql - 在 MySQL 中处理多个时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23325611/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com