如何判断给定的 NaiveDateTime(加上像 "US/Mountain" 这样的时区)是否在 Elixir 中是过去?



假设我有类型为NaiveDateTimendt和类型为"US/Mountain"的字符串tz。我怎样才能知道tz中的ndt是过去的?

Elixir默认不包含时区数据库,但如果您添加一个时区,它确实支持。在撰写本文时,最简单的方法是使用Tzdata,但请查看DateTime文档以获取最新的建议。

  1. 添加{:tzdata, "~> 1.1"}mix.exs
  2. 添加config :elixir, :time_zone_database, Tzdata.TimeZoneDatabaseconfig/config.exs
  3. 使用DateTime.from_naive!/3转换为支持时区的DateTime
  4. 使用DateTime.compare/2比较日期和现在。
~N[2000-01-01 10:10:10]
|> DateTime.from_naive!("US/Mountain")
|> DateTime.compare(DateTime.utc_now())
|> Kernel.==(:lt)

输出:

true

配置例子:

# config/config.exs
import Config
config :elixir, :time_zone_database, Tzdata.TimeZoneDatabase

相关内容

最新更新