Minha aplicação precisa enviar um email diário para os usuários no horário de sua escolha, o fuso horário também é definido pelo próprio usuário.
Qual é a melhor maneira de armazenar HH:MM + fuso horário? E como posso consultar isso efetivamente, sabendo que meu servidor está em um fuso horário específico?
Minha tabela atual é:
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
)
Não tenho certeza se TIMESTAMPTZ
é a maneira mais eficaz de fazer isso, pois armazena todo o carimbo de data e hora, e não apenasHH:MM
Armazene a
time
e o nome do fuso horário como texto .Not
timetz
, que está quebrado e desencorajado, e não apenas um deslocamento de horário, que quebraria com o horário de verão (DST) e outras esquisitices de fuso horário.Eu sugiro:
Para gerar carimbos de data/hora corretos para "hoje" (conforme definido pela sua
TimeZone
configuração atual):O resultado
tstz
pode ser em um "dia" diferente para o receptor.utc_ts
é o carimbo de data/hora correspondente no fuso horário UTC.Esta resposta relacionada no SO se encaixa com precisão e tem ampla explicação:
A parte: eu não usaria a palavra reservada "usuário" como identificador.