gpt4 book ai didi

不同行的 MySQL 时区

转载 作者:行者123 更新时间:2023-11-29 13:08:12 29 4
gpt4 key购买 nike

我陷入了这个逻辑。我正在开发一个消息调度项目,我的客户来自不同的国家。让我们考虑一下亚洲(不遵守夏令时)和美国/纽约(遵守夏令时)。

现在,我正在编写以下查询来获取距当前时间 10 分钟间隔内的时间表:

select message,subject,person_or_group,customer_id from common_schedule where reminder_type_1 in('beforedays','beforehours') and now() between cast(reminder_time1 as datetime) and addtime(cast(reminder_time1 as datetime),'00:10:00')

现在,如果我们有两条记录,一条记录纽约(夏令时),一条记录新德里:未实行夏令时的印度,我会得到纽约的错误数据,因为应该从其中减去 1 小时它。

还假设表 DY(夏令时)中有一个额外的列,其值为“y”或“n”。

最佳答案

一些事情:

  • 当您使用 MYSQL 的 now() 函数( docs here )时,将返回当前时区的值。

  • 时区可以设置为系统的全局时区,也可以设置为每个数据库连接 ( docs here )。

  • 您可以使用 MYSQL 的 CONVERT_TZ 函数 ( docs here ) 从一个时区转换到另一个时区,或者在本地时区和 UTC 之间转换。

  • DST 的 bool 标志从来都不是一个好主意,因为世界各国在不同的时间点遵守 DST。此外,各国经常改变关于何时遵守夏令时的规则。所有不同的规则都包含在时区数据中,您在使用 America/New_York 等时区时将引用这些数据。

  • 为了将来安排事件,您可能应该存储事件的本地时间及其所属时区。

  • 根据您正在处理的数据量,您可能考虑采用一种策略来预先计算 UTC 时间,以便从计划的本地时间开始运行。然后,通过将 UTC“现在”与预先计算的列进行比较,您可以更轻松地找到下一个要运行的任务。但是,您应该准备好定期重新评估 UTC 等效值,或者至少在收到时区数据更新时重新评估。

  • future 事件的安排本来就很困难。另请参阅我之前就此主题撰写的帖子:here , here , herehere .

关于不同行的 MySQL 时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22418875/

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