假设我有 NaiveDateTime
类型的 ndt
和一个类似 "US/Mountain"
的字符串 tz
。如何确定 tz
中的 ndt
是否是过去时间?
最佳答案
Elixir 默认情况下不包含时区数据库,但如果您添加时区数据库,它确实支持时区。在撰写本文时,最简单的方法是使用 Tzdata ,但请检查 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
关于datetime - 在 Elixir 中,如何判断给定的 NaiveDateTime (加上像 "US/Mountain"这样的时区)是否是过去的时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65890851/