我的应用程序需要在用户选择的时间每天向他们发送一封电子邮件,时区也由用户自己定义。
存储 HH:MM + 时区的最佳方式是什么?知道我的服务器位于特定时区,我如何有效地查询这个?
我现在的表是:
CREATE TABLE "reminder" (
"id" SERIAL UNIQUE PRIMARY KEY,
"user" INT NOT NULL REFERENCES "user"(id) ON DELETE CASCADE,
"scheduled_at TIMESTAMPTZ NOT NULL,
"created_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP
)
我不确定是否TIMESTAMPTZ
是最有效的方法,因为它存储整个时间戳,而不仅仅是HH:MM
将 a
time
和时区名称存储为text。Not
timetz
,这已被破坏和劝阻,而不仅仅是时间偏移,它会因夏令时 (DST) 和其他时区异常而中断。我建议:
要为“今天”生成正确的时间戳(由您当前的
TimeZone
设置定义):结果
tstz
可能是接收者的不同“日子”。utc_ts
是 UTC 时区中的相应时间戳。这个关于 SO 的相关答案非常适合并且有充分的解释:
另外:我不会使用保留字“用户”作为标识符。