假设我有类型为NaiveDateTime
的ndt
和类型为"US/Mountain"
的字符串tz
。我怎样才能知道tz
中的ndt
是过去的?
Elixir默认不包含时区数据库,但如果您添加一个时区,它确实支持。在撰写本文时,最简单的方法是使用Tzdata,但请查看DateTime
文档以获取最新的建议。
- 添加
{:tzdata, "~> 1.1"}
到mix.exs
- 添加
config :elixir, :time_zone_database, Tzdata.TimeZoneDatabase
到config/config.exs
- 使用
DateTime.from_naive!/3
转换为支持时区的DateTime
。 - 使用
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