我正在使用ecto在postgres db上进行查询。
问题是DB具有带有UTC DateTime的字段,但是在比较之前,我需要查询将此数据转换为本地时区。
from(u in User) |> where([u], u.created_at < ^input_datetime) |> Repo.all
上面的表达式将以UTC格式考虑创建的_at进行比较。我不想要这个。我希望ECTO转换创建的_AT到本地时区,然后再进行比较才能返回正确的结果。
有没有办法做到这一点?
您需要在进行查询之前将input_date
转换为适当的时区。
input_date
|> Date.from_iso8601!()
|> Timex.to_datetime(timezone)
|> Timex.to_datetime()
应该将输入日期转换为您要比较的时区,然后将其转换为DateTime的UTC表示形式,以便在ECTO查询中进行比较。
请注意,您自己需要将其转换为UTC的唯一原因是因为时间戳(inserted_at
和updated_at
(默认情况下是:naive_datetime
类型。如果它们是:utc_datetime
,它将为您完成转换。
(在此处进行完整的对话:https://elixirforum.com/t/functions-used-in-db-field/12673(