【问题标题】:Query table based on users local hour, rather than GMT hour (including daylight savings support)基于用户本地时间的查询表,而不是 GMT 时间(包括夏令时支持)
【发布时间】:2022-01-14 00:54:57
【问题描述】:

如果用户希望根据当地时区的一天中的一个小时触发通知或某些活动。您可以将每个用户首​​选的通知时间存储在数据库中,并且只需每小时轮询表以了解谁想要通知。但这不会考虑夏令时。这通常是如何解决的?

假设用户在美国东部标准时间上午 9 点请求:

  1. 如果您将美国东部标准时间上午 9 点转换为 GMT,并将 GMT 时间存储在数据库中。这不起作用,因为 GMT 转换仅在夏令时之前有效。

  2. 如果您将 9am EST 直接存储在表中,那么您必须查询表中的每一行,包括它们的时区,并计算每一行中的当前时间。

选项 2 有效,但仅适用于小型数据库。最好的方法是什么?

【问题讨论】:

  • 这篇文章似乎包含了您可能想了解的有关该主题的所有内容 -stackoverflow.com/questions/2532729/…
  • 您使用的是哪个 dbms? (对时区等的不同内置支持)
  • @jarlh 我最初想排除后端,这样我就可以使问题变得通用。但是您的权利有一些相关的数据库特定功能。我们正在使用 cql/cassandra。
  • @procopypaster 感谢您的回复,但该帖子正在讨论如何存储时间。我在问一个微妙不同的问题。如何根据用户首选的通知时间“存储”任务/通知。存储时间+时区是一种选择,但在该表上“选择小时=9”需要全表扫描。

标签: sql time localization cql


【解决方案1】:

一种选择是将小时存储在 GMT 中,因此您可以将表格批量/分段为上午 9 点、上午 10 点等...

然后,每次你发出通知时,你都会重新计算明天的时间,这样在夏令时的前一天,不仅会发送通知,还会更新小时,为明天做准备。

此解决方案的唯一问题是,如果您有很大的细分市场(即美国),那么一年中的某些日子将会发生大量的批量更新。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-19
    • 2016-11-25
    • 2017-11-20
    • 2016-03-27
    • 2017-08-31
    • 2023-01-04
    • 1970-01-01
    • 2021-06-24
    相关资源
    最近更新 更多