【问题标题】:set datetime milliseconds precision - elixir设置日期时间毫秒精度 - Elixir
【发布时间】:2017-08-31 23:59:25
【问题描述】:

我正在尝试获取在亚秒部分中只有 3 位数字的日期时间。
使用 timex 我得到以下结果:

iex(12)>   {:ok, date} = Timex.format(Timex.shift(Timex.local, days: 16), "{ISO:Extended}")
{:ok, "2017-04-22T09:00:44.403879+03:00"}

我怎样才能得到这样的东西:
{:好的,“2017-04-22T09:00:44.403+03:00”} ?

【问题讨论】:

  • 您是否尝试过使用格式字符串,例如:{:ok, date} = Timex.format(Timex.shift(Timex.local, days: 16), "%FT%T%:z", :strftime)
  • @ZubairNabi,这给了我一个没有毫秒的结果,我无法找出正确的格式字符串来获得 3 毫秒的数字

标签: datetime elixir timex


【解决方案1】:

自 Elixir 1.6.0 以来,TimeDateTimetruncate/2 功能/em> 和 NativeDateTime

iex(1)> dt = Timex.now()
#DateTime<2018-02-16 19:03:51.430946Z>

iex(2)> dt2 = DateTime.truncate(dt, :millisecond)
#DateTime<2018-02-16 19:03:51.430Z>

【讨论】:

    【解决方案2】:

    DateTime 有一个 microsecond 字段,它是一个包含值和精度的元组。如果您将精度更改为3,您将在微秒输出中获得 3 位数字。我在 Timex 中找不到执行此操作的任何函数,但您可以手动修改该值:

    iex(1)> dt = %{microsecond: {us, precision}} = Timex.now
    #<DateTime(2017-04-06T08:26:24.041004Z Etc/UTC)>
    iex(2)> precision
    6
    iex(3)> dt2 = %{dt | microsecond: {us, 3}}
    #<DateTime(2017-04-06T08:26:24.041Z Etc/UTC)>
    iex(4)> dt2 |> Timex.format!("{ISO:Extended}")
    "2017-04-06T08:26:24.041+00:00"
    

    【讨论】:

    • 这是个好主意,但您应该将微秒值us 补零。我遇到了一个问题,格式化时间戳的毫秒部分左移一位。例如,如果dt#DateTime&lt;2015-11-02 03:08:57.071819Z&gt;,则dt.microsecond{71819, 6}。执行%{dt | microsecond: {71819, 3}} |&gt; Timex.format("{ISO:Extended:Z}") 会得到"2015-11-02T03:08:57.718Z"。请注意,毫秒部分现在是 718 而不是 071。要解决此问题,请将值填零:%{dt | microsecond: {"071819", 3}} |&gt; Timex.format!("{ISO:Extended:Z}") "2015-11-02T03:08:57.071Z"
    • @GordonZheng 我认为这里正确的解决方案是将us除以10^&lt;the number of digits that were reduced&gt;,例如6 -> 3 将是%{dt | microsecond: {div(us, 1000), 3}} |&gt; Timex.format("{ISO:Extended:Z}")。由于这行得通,我猜我的答案的行为和你的评论是一个错误——us 的值应该不超过10^precision
    • 啊,这是一个更好的解决方案。谢谢@Dogbert!
    猜你喜欢
    • 1970-01-01
    • 2015-09-23
    • 1970-01-01
    • 1970-01-01
    • 2013-02-03
    • 2013-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多