需要为我的每个用户运行一个常规作业,但是我希望在他们不在时运行它。由于他们可能会在午夜开门,所以我希望他们能够指定时间以及他们的时区。
在为给定用户运行作业之后,我想在他们的时区中预先计算下一次出现的时间并将其存储起来,以使其更易于查询(尽管我不确定这是最好的方法)
到目前为止,我已经弄清楚了以下内容:
我发现在AT TIME ZONE
上使用TIMESTAMP WITHOUT TIME ZONE
可以计算该时间发生的本地时间的绝对时间,但是我还没有弄清楚如何在用户的本地时间添加时间偏好。
到目前为止,我有这个:
SELECT (TIMESTAMP 'tomorrow' AT TIME ZONE timezone) my_table
,我想要这样的东西:
UPDATE my_table SET next_day_start_timestamptz=((TIMESTAMP 'tomorrow' + day_start_time) AT TIME ZONE timezone) WHERE id=1
,但我不断收到类型错误。
我该如何做?
答案 0 :(得分:1)
这取决于day_start_time
的数据类型是什么以及如何存储。
如果它是文本类型,适当的整数或整数类型(例如09或9),则可以简单地
select ((TIMESTAMP 'tomorrow'
+ INTERVAL '1 hour' * day_start_time::int)
AT TIME ZONE day_start_time ) FROM my_table;
如果它是代表开始时间的时间数据类型,则可以简单地添加它
select ((TIMESTAMP 'tomorrow'
+ day_start_time ) AT TIME ZONE day_start_time ) FROM t