gpt4 book ai didi

mysql - 我需要在 MySQL 中进行日期时间转换。如何确定客户端的时区?

转载 作者:行者123 更新时间:2023-11-29 14:47:21 24 4
gpt4 key购买 nike

我会尝试解释我的目标、我想要实现的目标以及为什么没有任何东西对我有用:我需要将 DATETIME 存储在 MYSQL 表中。客户端应该能够通过两种方式检索该 DATETIME:

  1. 如果日期时间 2011-07-12 00:00:00 由时区为 UTC+2 的用户 1 添加,然后时区为 UTC-3 的用户 2 检索此值,他应该得到日期时间 2011-07-11 19 :00:00。夏令时在这里很重要。
  2. 如果日期时间 2011-07-12 00:00:00 是由 user1 添加的,则 user2 会获得完全相同的日期

就是这样,我不需要更多了。但我找不到如何做到这一点的方法...

我想出的是将日期存储在 user1 时区中,如果使用第二种方法,则根本不执行任何转换。问题出在第一种方法上。我想我可以使用 CONVERT_TZ() 函数,但是我应该使用什么作为时区参数?在我看来, mysql.time_zone_name 表中的时区列表完全是一团糟。让用户从这个困惑的列表中选择他的时区是否实用?例如,我应该使用什么:欧洲/瓦尔沙瓦还是波兰?如果我住在克莱佩达市(欧洲,立陶宛),我是否应该选择欧洲/维尔纽斯时区?为什么这些名字这么复杂?也许还有其他 MySQL 表使用某种标准化的名称,例如 UTC+02:00 宽度 DST,而不使用,例如在 windows 操作系统中(遗憾的是我没有机会与其他操作系统进行比较)?我可能会像记录的那样使用时区“+02:00”的偏移量,但不会保留 DST 信息。或者也许有办法自动确定用户时区?

希望我说清楚了。非常感谢帮助和任何建议。

[已编辑(回复Flimzy)]

如果我总是必须转换为用户(客户端)日期,我很生气,在 UTC 中存储所有内容是最好的方法。但是,如果一个用户输入 DATETIME 2011.11.12 00:00:00,而另一个用户必须看到完全相同的时间并且他们的时区不匹配,那么该怎么办?所以我决定在存储和存储时区时根本不转换日期。这是我的问题。如何自动确定客户端时区?或者如何使时区名称不那么困惑?该设置对于我的应用程序非常重要,因此我不想让用户配置它,但如果没有办法做到这一点,我希望该时区列表尽可能清晰。

最佳答案

每当您处理多个时区时,您应该始终在插入之前将时间转换为 UTC,然后在从数据库中提取时转换为用户的时区以供显示。

即使您的用户没有使用 UTC,以 UTC 存储也会大大简化事情。

与“UTC+02:00 with DST”不同,这些名称令人困惑的原因是,同一时区的不同地区对 DST 的定义不同。以我所在地区为例,美国和墨西哥位于同一时区(“美国中部”),但 DST 日期不同。美国的变化比墨西哥早大约两周。因此,仅仅说“我处于 GMT-05 夏令时”是不够的,因为这并不能传达哪些 DST 规则适用于我。

很多地方的夏令时规则比这个例子还要复杂。这种复杂性进一步证明,将所有内容存储在 UTC 中使生活变得更加简单:)

关于mysql - 我需要在 MySQL 中进行日期时间转换。如何确定客户端的时区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6663820/

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