【问题标题】:Ecto considering timezoneEcto 考虑时区
【发布时间】:2018-02-21 17:11:06
【问题描述】:

我正在使用 Ecto 对 postgres 数据库进行查询。

问题是 db 有带 utc 日期时间的字段,但我需要查询将这些数据转换为本地时区,然后再进行比较。

from(u in User) |> where([u], u.created_at < ^input_datetime) |> Repo.all

上面的表达式会考虑用utc格式的created_at来比较。我不想要这个。我希望 Ecto 在比较之前将 created_at 转换为本地时区以返回正确的结果。

有没有办法做到这一点?

【问题讨论】:

    标签: timezone elixir ecto


    【解决方案1】:

    在进行查询之前,您需要将input_date 转换为正确的时区。

    input_date
    |> Date.from_iso8601!()
    |> Timex.to_datetime(timezone)
    |> Timex.to_datetime()
    

    这应该将输入日期转换为您要与之比较的任何时区,然后将其转换为该日期时间的 UTC 表示,以便在 ecto 查询中进行比较。

    请注意,您需要自己将其转换为 UTC 的唯一原因是时间戳(inserted_atupdated_at)默认为 :naive_datetime 类型。如果他们是:utc_datetime,它会为您完成转换。

    (此处为完整对话:https://elixirforum.com/t/functions-used-in-db-field/12673

    【讨论】:

    • 哇!长生不老药论坛上的这个帖子是我的哈哈。不管怎么说,还是要谢谢你。这样就解决了!
    猜你喜欢
    • 2023-03-15
    • 2017-09-15
    • 2019-12-06
    • 2021-12-26
    • 2019-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-12
    相关资源
    最近更新 更多