【问题标题】:Elixir 1.5 DateTime compareElixir 1.5 日期时间比较
【发布时间】:2019-12-19 10:24:15
【问题描述】:

在我的应用程序中,我需要设置操作超时。感谢 Timex 库,这很容易做到。

很遗憾,我遇到了一个奇怪的错误。我挖了它,发现了这个:

iex(55)> dt = Timex.now() |> Timex.add( Timex.Duration.from_seconds( 10))
#DateTime<2017-12-13 18:32:30.922418Z>

iex(56)> DateTime.utc_now()                                              
#DateTime<2017-12-13 18:32:22.411246Z>

iex(57)> dt <= DateTime.utc_now()                                        
false
iex(58)> dt <= DateTime.utc_now()
false
iex(59)> dt <= DateTime.utc_now()
false
iex(60)> dt <= DateTime.utc_now()
false
iex(61)> dt <= DateTime.utc_now()
false

iex(62)> dt <= DateTime.utc_now()
false (!)
iex(63)> dt <= DateTime.utc_now()
true (!)
iex(64)> dt <= DateTime.utc_now()
false (!)

iex(65)> dt <= DateTime.utc_now()
false
iex(66)> dt <= DateTime.utc_now()
false

我做错了什么?它是一个错误,还是它应该是这样的? 在 Elixir 中比较两个日期时间的正确选择是什么?

PS>我正在使用 Elixir 1.5.2

Erlang/OTP 20 [erts-9.0.1] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:10] [hipe] [kernel-poll:false]

【问题讨论】:

    标签: datetime elixir


    【解决方案1】:

    您不能将比较运算符与DateTime 一起使用。对于这些操作员来说,DateTime 结构只是一张地图,它不会比较您想如何比较 DateTimes(年、月、日等)。您可以为此使用DateTime.compare/2

    iex(1)> {:ok, dt1, 0} = DateTime.from_iso8601("2017-12-13 18:32:30.922418Z")
    {:ok, #DateTime<2017-12-13 18:32:30.922418Z>, 0}
    iex(2)> {:ok, dt2, 0} = DateTime.from_iso8601("2017-12-13 18:32:22.411246Z")
    {:ok, #DateTime<2017-12-13 18:32:22.411246Z>, 0}
    iex(3)> DateTime.compare(dt1, dt2)
    :gt
    iex(4)> DateTime.compare(dt2, dt1)
    :lt
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 2015-07-20
      • 1970-01-01
      • 2012-12-29
      • 2011-04-28
      相关资源
      最近更新 更多