我如何判断给定的 NaiveDateTime(加上像 "US/Mountain" 这样的时区)在 Elixir 中是否过去了?
How do I tell if a given NaiveDateTime (plus timezone like "US/Mountain") is in the past in Elixir?
假设我有 ndt
类型 NaiveDateTime
和一个字符串 tz
,如 "US/Mountain"
。我怎样才能知道 tz
中的 ndt
是否是过去的?
默认情况下,Elixir 不包含时区数据库,但如果您添加时区,它确实支持时区。在撰写本文时,最简单的方法是使用 Tzdata, but check the DateTime
docs 获取最新建议。
- 将
{: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
假设我有 ndt
类型 NaiveDateTime
和一个字符串 tz
,如 "US/Mountain"
。我怎样才能知道 tz
中的 ndt
是否是过去的?
默认情况下,Elixir 不包含时区数据库,但如果您添加时区,它确实支持时区。在撰写本文时,最简单的方法是使用 Tzdata, but check the DateTime
docs 获取最新建议。
- 将
{: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